2016-06-24 1 views
0

Microsoft Exchange 2010에서 NLTM 인증에 문제가 있습니다. EWS Exchange에서 일부 데이터를 가져 오기 위해 앱을 만들고 있으며 Exchange에서 NTLM을 사용할 수 있으므로 서버 내 요청이 NTLM 핸드 셰이크 절차를 따르는 지 확인해야합니다. 나는 그 절차를 연구했고 이것이 4 방향 핸드 셰이크를 만드는 6 단계로 구성되어 있음을 이해한다. 아래 스 니펫은 명확하게 설명합니다.Exchange 2013에 대해 NTLM 시도가 실패하거나 올바른 순서로 수행되지 않습니다.

1: C --> S GET ... 

2: C <-- S 401 Unauthorized 
       WWW-Authenticate: NTLM 

3: C --> S GET ... 
       Authorization: NTLM <base64-encoded type-1-message> 

4: C <-- S 401 Unauthorized 
       WWW-Authenticate: NTLM <base64-encoded type-2-message> 

5: C --> S GET ... 
       Authorization: NTLM <base64-encoded type-3-message> 

6: C <-- S 200 Ok 

문자 C는 서버를 나타내는 문자입니다. NLTM에 대한 자세한 내용은 here을 참조하십시오.이 자료는 참조 용으로도 사용됩니다.

그래서 클라이언트는 서버가 응답하는 GET 요청을 발행하여 클라이언트에 자신을 식별해야한다는 메시지를 표시합니다. 또한 해당 헤더 (이 경우 NTLM)에 인증 방법을 보냅니다. 그런 다음 클라이언트는 클라이언트의 호스트와 도메인 이름이 들어있는 Type-1 메시지로 알려진 것을 전송합니다. 그런 다음 서버는 NTLM 챌린지가 들어있는 Type-2 메시지로 응답합니다. 그런 다음 클라이언트는 사용자 이름, 도메인, 호스트 이름 및 두 가지 응답을 포함하는 Type-3 Message라는 다른 요청으로 응답합니다.

또한 NTLM은 요청이 아닌 연결을 인증하고 연결이 유지되도록 필요한 조치를 취한다는 것을 알고 있습니다.

NTLM을 통해 EWS로 요청을 보낼 수 있는지 확인하려면 SoapUI이라는 도구를 사용하여 SOAP 요청을 보냈습니다. SoapUI에는 NTLM을 처리 할 수있는 기능이 내장되어 있으므로 사용자 이름, 암호 및 도메인을 입력하기 만하면 요청을 보낼 때 서버와의 NTLM 핸드 셰이크를 처리합니다. 이제는이 모든 것이 SoapUI를 통해 정상적으로 작동합니다. 요청은 악수를 통해 처리되며 궁극적으로 서버에서 200 응답을받습니다. 이것을 보여주기 위해 Microsoft Message Analyzer를 사용하여 들어오고 나가는 HTTP 요청을 검사했습니다. SoapUI와 서버 사이의 요청은 SoapUI에서 초기 요청을 보냈을 때 발생합니다.

SoapUI request

이러한 요청이 핸드 셰이크가 발생하도록되어있는 형태로 위의 그림에 따라 볼 수 있듯이.

이제 전환점이되었습니다. 나는이 모든 것을 이론적으로는 동일하게, 나의 신청서를 통해한다. 노드 기반 응용 프로그램에서는 this 라이브러리를 사용하여 EWS에 요청을 보내고 차례로 this 라이브러리를 사용하여 NTLM 핸드 셰이크를 처리합니다. 따로 따로 사용자 이름, 암호, URL, 도메인 및 호스트 이름을 설정하면이 문제를 해결하기 위해 내가 잘못 할 수있는 일은 없습니다. 따라서 라이브러리를 사용하여 요청을 형식화하고 NTLM을 통해 인증에 실패했음을 확인하기 위해 발급합니다. 이 두 라이브러리를 살펴본 결과, httpntlm이 NTLM 핸드 셰이크 프로토콜을 따르고 결국 적절한 NTLM 토큰을 보냈지 만 무엇이 잘못되었는지를 알 수는 없습니다. 다음은 내 앱에서 요청을 발행 할 때 HTTP 플로우가 어떻게 생겼는지입니다.

Application HTTP

그냥보고에 의해 지금

, 이전 이미지가 차이점을 발견 할 수 있습니다. 우선, 인증 헤더가없는 초기 요청 및 응답이 없습니다. 나는이 NTLM 핸드 셰이크에서 선택 사항인지 확실하지 않으므로 SoapUI는 라이브러리를 생략합니다.

왜 두 번째 이미지는 두 번째 이미지의 NTLMv2에 대한 인증 헤더이고 첫 번째 이미지의 NTLM에만 해당됩니다. NTLM에는 두 가지 버전이 있으며 둘 다 서버에서 사용하도록 설정되어 있지만 요청에서 다르게 지정되는 이유는 무엇입니까? 정확히 NTLMv2를 지정하는 라이브러리를 찾을 수 없습니다.

두 번째 이미지에서 Type-2 메시지가 서버의 응답으로 도착하지 않았을 수도 있습니다.

어쨌든 여기에서 무슨 일이 일어나고 있는지 그리고 http 흐름의 주요 차이점을 파악할 수 없습니다. 어떤 도움을 주시면 감사하겠습니다.

답변

0

[email protected]에 대한 NTLMv2 지원이 업데이트되었습니다. 이에 대해서는 [email protected] 모듈을 참조하십시오. 1.2.0을 설치하고 예제를 github 페이지에서 사용할 수 있습니다.

@next은 dev build 태그가 ews-javascript-api이고 곧 dev 빌드가 종료됩니다 (github의 0.9를 추적하십시오).

빠른 해결을 위해 guthub에서 공개 문제가 있습니다.

관련 문제