5

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 認証が有効になっている場合のみ、ブラウザーは次のメッセージをスローします。

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) 資格情報を渡し、コード ビハインドでそれらを解析する方法はありますか?私のウェブサービス。

ドキュメントと膨大な数のオプションは圧倒され、混乱を招きます。

4

3 に答える 3