NTLM クレデンシャルをリモート Web サービスに渡したいと考えています。
私は自分のページを Javascript からロードrm1.domain.com
し、その Javascript で Web サービスrm2.domain.com
が呼び出されます。
呼び出しを行っているユーザーの NTLM 資格情報を読み取れるように Web サービスを呼び出したいのですが、いくつかの問題が発生しています。
シナリオ A (うまくいかない)
構成ファイルに次のものが含まれている場合:
<webHttpEndpoint>
<standardEndpoint name=""
automaticFormatSelectionEnabled="true"
crossDomainScriptAccessEnabled="true">
<security>
<transport clientCredentialType="Ntlm"></transport>
</security>
</standardEndpoint>
</webHttpEndpoint>
IISでWindows認証のみが有効になっていると、期待どおりの結果が得られます。
シナリオ B (機能しない)
構成ファイルに次のものがあります
<webHttpEndpoint>
<standardEndpoint name="" automaticFormatSelectionEnabled="true">
<security>
<transport clientCredentialType="Ntlm"></transport>
</security>
</standardEndpoint>
</webHttpEndpoint>
私のJavaScriptでは次のようになります:
jQuery.ajax({
url: "http://rm2.domain.com/getInfo?name=bobsyouruncle,
dataType: "json",
async: false,
success: function(data) {
console.log('woot');
},
error: function(ex) {
console.log(ex);
}
});
IIS で Windows 認証が有効になっている場合のみ、ブラウザーは次のメッセージをスローします。
- GET http://rm2.domain.com/getInfo?name=bobyouruncle 401 (無許可) jquery-1.10.1.min.js:6
- XMLHttpRequest はhttp://rm2.domain.com/getInfo?name=bobyouruncleを読み込めません
。
http://rm1
Access-Control-Allow-Origin でオリジンが許可されていません。jquery-1.10.1.min.js:6
JavaScript を JSONP に変更しても、何も得られませんが、web.config からcrossDomainScriptAccessEnabled="true"を削除したため、これも予想外ではありません。ただし、シナリオ C でわかるように、認証方式を有効にしてcrossDomainScriptAccessEnabled="true"にすることはできません。
シナリオ C (資格情報を渡さない)
mr2 の Web サービスの web.config がシナリオ B のようで、IIS 認証の匿名が有効で (Windows 認証が無効)、jQuery の要求が JSONp の場合、サービスはデータを返しますが、認証情報は渡されません。
結論 (TL;DR) Web サービスを IIS 匿名のままにし、web.config にクロス ドメイン タグを付けて、ブラウザーからドメイン (NTLM) 資格情報を渡し、コード ビハインドでそれらを解析する方法はありますか?私のウェブサービス。
ドキュメントと膨大な数のオプションは圧倒され、混乱を招きます。