문제

최근 SharePoint 프로젝트에서 NTLM 인증 대화 상자를 대체해야하는 인증 웹 파트를 구현했습니다.사용자가 유효한 자격 증명을 제공하는 한 정상적으로 작동합니다.사용자가 잘못된 자격 증명을 제공 할 때마다 Internet Explorer에 NTLM 대화 상자가 나타납니다.

XmlHttpRequest를 통해 인증하는 Javascript 코드는 다음과 같습니다. 라코 디스

사용자가 잘못된 자격 증명을 제공 할 때 NTLM 대화 상자가 표시되는 것을 원하지 않습니다.대신 인증 양식의 로그인 버튼에 의한 포스트 백을 실행해야합니다.즉, 브라우저가 내 무단 요청에 대해 알아 내지 않아야합니다.

Javascript를 통해이 작업을 수행 할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

Mark 의 의견이 정확합니다. NTLM 인증 프롬프트는 401 응답 코드와 WWW-Authenticate 헤더에서 제공되는 첫 번째 메커니즘으로 NTLM의 존재에 의해 트리거됩니다 (참조 : NTLM 인증 프로토콜 ).

질문 설명을 올바르게 이해했는지 확실하지 않지만 SharePoint에 대한 NTLM 인증을 래핑하려는 것 같습니다. 즉, 서버 측 인증 프로토콜을 제어 할 수 없습니다. 맞습니까? 실패한 자격 증명에 대해 401 응답을 보내는 것을 피하기 위해 서버 측을 조작 할 수없는 경우 (클라이언트 측) 사양의 일부이기 때문에이 문제를 피할 수 없습니다.

XMLHttpRequest 객체 <인용구>

UA가 HTTP 인증 [RFC2617]을 지원하는 경우 요청을 고려해야합니다. 이 개체에서 시작하여 다음을 포함하는 보호 공간의 일부가 액세스 된 URI 및 Authorization 헤더를 보내고 401 Unauthorized 요청을 처리합니다. 적절하게. 인증이 실패하면 UA는 사용자에게 자격 증명을 요청해야합니다. 따라서 사양은 실제로 사용자가 URL에 직접 액세스 한 것처럼 XMLHttpRequest에서 401 응답이 수신되면 그에 따라 사용자에게 메시지를 표시하도록 브라우저에 요청합니다. 이것을 정말로 피하는 유일한 방법은 서버 측을 제어하고 Mark가 언급했듯이 401 Unauthorized 응답을 피하는 것입니다.

마지막으로 한 가지 생각은 다른 웹 서버에있는 별도의 서버 측 스크립트와 같은 프록시를 사용하여이 문제를 해결할 수 있다는 것입니다. 그런 다음 해당 스크립트는 사용자를 가져와 매개 변수를 전달하고 인증을 확인하므로 사용자의 브라우저가 원래 HTTP 요청을 수행하는 것이 아니므로 프롬프트를 유발하는 401 응답을받지 못합니다. 이 방법을 사용하면 "프록시"스크립트에서 실패했는지 확인할 수 있으며 실패한 경우 성공할 때까지 사용자에게 다시 프롬프트합니다. 인증 이벤트가 성공하면 자격 증명이 올바르게 지정되면 모든 것이 작동하므로 현재 상태 그대로 HTTP 요청을 가져올 수 있습니다.

다른 팁

IIRC, 브라우저는 다음이 요청 스트림에 다시 올 때 인증 대화 상자를 표시합니다.

  • 401의 HTTP 상태
  • WWW-Authenticate 헤더

    그 중 하나 또는 둘 다를 억제해야 할 것 같습니다.이를 수행하는 쉬운 방법은 Base64 사용자 이름과 암호 (HTTPS를 사용하고 있습니까?)를 사용하고 유효 / 잘못된 상태로 200을 반환하는 로그인 방법을 사용하는 것입니다.암호가 확인되면 XHR에서 사용할 수 있습니다.

Firefox를 제외한 모든 브라우저에서이 기능을 사용할 수있었습니다.몇 년 전의 아래 내 블로그 게시물을 참조하십시오.내 게시물은 IE 전용이지만 약간의 코드 변경으로 Chrome 및 safari에서 작동합니다.

http://steve.thelineberrys.com/ntlm-login-with-anonymous-fallback-2 /

수정 :

내 게시물의 요점은 try catch 문에서 JS xml 호출을 래핑하는 것입니다.IE, Chrome 및 Safari에서는 NTLM 대화 상자가 표시되지 않습니다.firefox에서 예상대로 작동하지 않는 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top