22

と通信する HTML5 モバイル アプリを開発していますWebServices。Web サービスは NTLM 認証プロトコルを使用します。JavaScript によるハンドシェイクの処理に問題があります。NTLM は401 unauthorized、応答する方法が見つからない POST に as 応答を送信します。

JavaScript で NTLM 認証は可能ですか? 基本認証などを介してプロキシ Web サービスを構築する必要がありますか?

私のjQuery呼び出しは次のようなものです...

$.ajax({
                    type: "POST",
                    url: URL,
                    contentType: "text/xml",
                    dataType: "xml",
                    data: soapRequest,
                    username: 'username',
                    password: 'password',
                    xhrFields: {
                        withCredentials: true
                    },
                    success: processSuccess,
                    error: processError
});
4

4 に答える 4

5

私が見た限りでは、Windows 統合/NTLM 認証を AJAX で実装した人は誰もいませんが、可能なはずです (フォーム認証と WindowsTokenRoleProvider を組み合わせるために、現在のプロジェクトでそれを行うことを検討しています)。

基本的なワークフロー次のように分類されます (ここここの記事に基づく):

  1. 「Authorization」ヘッダーに base64 でエンコードされたタイプ 1 NTLM メッセージを使用して GET 要求を実行します。
  2. base64 でエンコードされたタイプ 2 NTLM メッセージを 401 応答の "WWW-Authenticate" ヘッダーから取り出します。
  3. 前の手順で受け取ったヌースで NTLM 操作を実行します (コード例がまだありません)。
  4. 「Authorization」ヘッダーで base64 でエンコードされたタイプ 3 NTLM メッセージを使用して最終的な GET を実行します。これは 200 を返すはずです。

HTTP 経由の NTLM 認証は、承認された HTTP 要求というよりも、HTTP を使用した CHAP 実装に近いものです。

実際にこれを実装するようになったら、更新します。申し訳ありませんが、これ以上お役に立てませんでした。

于 2013-09-19T21:38:27.690 に答える
3

問題は、現在ログインしているドメイン/ユーザーを JavaScript 経由で取得できないことです (または、解決策が見つからない場合)。

ドメイン、ユーザー名、パスワードがわかっている場合は、https://github.com/erlandranvinge/ntlm.js/tree/masterのようなものを使用できます

ただし、シングルサインオンのためにこの方法を採用することは、長期的にはイライラすることになると思います。

非表示の iframe で NTLM 認証を行い、javascript を介して iframe にアクセスすることになりました。

于 2015-09-15T12:56:28.997 に答える