2016-06-24 1 views
0

Microsoft Exchange 2010でNLTM認証に問題があります。EWS Exchangeから一部のデータを取得するアプリケーションを作成しています.NTLMがExchangeで有効になっていますサーバー私は自分の要求が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はサーバーを表し、文字Sはサーバーを表します。 NLTMの詳細については、hereを参照してください。私も参考にしています。

したがって、クライアントは、サーバーが応答するGET要求を401で発行し、クライアントに自身を識別する必要があることをクライアントに伝えます。また、対応するヘッダー(この場合はNTLM)に認証方法を送信します。次に、クライアントは、クライアントのホスト名とドメイン名を含むType-1メッセージとして知られているものを送信します。次に、NTLMチャレンジを含むType-2メッセージとして応答します。次に、クライアントは、別の要求であるType-3 Message(ユーザー名、ドメイン、ホスト名、および2つの応答を含む)で応答します。

また、NTLMは要求ではなく接続を認証することを理解しており、接続が確実に維持されるようにするために必要な手順を実行します。

NTLMからEWSにリクエストを送信できることを確認するために、SoapUIというツールを使用してSOAPリクエストを送信しました。 SoapUIには、NTLMを処理するための機能が組み込まれているため、ここにユーザー名、パスワード、ドメインを入力するだけで、要求を送信する際にNTLMハンドシェイクを処理します。さて、これらのすべてがSoapUIを通じて正常に動作し、要求はハンドシェイクを経て、最終的にサーバーから200の応答が得られます。これを示すために、Microsoft Message Analyzerを使用して着信および発信HTTPリクエストを検査しました。これらは、SoapUIからの最初のリクエストを送信したときに発生した、SoapUIとサーバー間のリクエストです。

SoapUI request

あなたはこれらの要求は、ハンドシェイクが発生することが想定された形態で上記の図に従って見ることができるように。

今、転換点です。理論的には私のアプリケーションを通じて、これをすべて行います。 Nodeベースのアプリケーションでは、thisライブラリを使用してEWSにリクエストを発行し、さらにthisライブラリを使用してNTLMハンドシェイクを処理します。私とは別に、ユーザー名、パスワード、URL、ドメイン名、ホスト名を設定すると、これを破るために間違っていることはありません。だから私はライブラリを使って要求をフォーマットし、NTLM経由で認証に失敗したことを確認するためだけに発行します。私はこれらのライブラリの両方を調べて、httpntlmがNTLMハンドシェイクプロトコルに従っていることがわかり、最終的には適切なNTLMトークンを送信しますが、何が間違っているのか分かりません。私のアプリからリクエストを発行したときのhttpフローの様子は次のとおりです。今

Application HTTP

これだけを見て、あなたは違いを見分けることができ、前の画像によります。まず、認証ヘッダーのない最初の要求と応答は存在しません。私はこのNTLMハンドシェイクでオプションであるかどうか分からないので、SoapUIはライブラリを省略しています。

また、なぜ2番目のイメージが2番目のイメージのNTLMv2に対する認証ヘッダーで、最初のイメージのNTLMのみになります。 NTLMには2つのバージョンがあり、どちらもサーバー上で有効になっていますが、要求には異なる理由があります。 NTLMv2を正確に指定しているライブラリが見つかりません。

2番目のイメージでは、Type-2メッセージがサーバからの応答として到着したことがないようですか?

とにかく、私はここで何が起こっているのか、なぜこの流れの大きな違いがあるのか​​理解できません。どんな助けもありがとう。

答えて

0

[email protected]のNTLMv2サポートが更新されました。このためには[email protected]モジュールを参照してください。 1.2.0をインストールし、githubページでexampleを使用できます。

@nextはすぐにそれがDEVビルド外となりますews-javascript-apiためのdevのビルドタグ(githubの上のトラックのマイルストーン0.9)です。

これはguthubの問題で、より迅速な解決が可能です。

関連する問題