2016-09-02 4 views
0

シナリオWindows認証のWeb APIの不正 - 複数のサーバ

私は同じ内部ネットワーク内の別々のサーバ上で実行されている2つのアプリケーションを、持っています。

サーバー1にはWebAPI MVCプロジェクトが含まれています。

サーバ2は、両方のアプリケーションがWindows認証を使用して動作1.

サーバー上のAPIを呼び出すMVC Webアプリケーションが含まれています。

コードは、IISとVisual Studioの両方を介してローカルで実行しているときに問題なく動作します。

サーバー上で動作しているとき、私は次のエラーを取得:以下

The remote server returned an error: (401) Unauthorized.

はフィドラーからの要求です。以下は

GET http://server1/..../..../GetTest HTTP/1.1 
Host: server 1 
Connection: keep-alive 
Cache-Control: max-age=0 
Authorization: Negotiate YIIHIgYGKwYBBQUCoIIHFjCCBxK..... 
Upgrade-Insecure-Requests: 1 
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 
Accept:  text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 
Cookie: ASP.NET_SessionId=gffyzdgub41op0diygy5lyv2 

API要求コードは、助けを

​​

おかげです。

答えて

0

これはWindows認証でdouble hopと呼ばれている場合によく知られている問題です。このような問題のため

2ソリューション:我々はServer1に電話をかけることを許可することをサービスアカウントにApplicationPoolIdentityからServer2

  • 変更Application pool identity、。この解決策は、ユーザがServer2にapiを呼び出すときにコンテキストを伝播しません(Server1メソッドにパラメータ化された情報を送信して、データをフィルタアウトするための呼び出しを行うことができます)。

  • Server2Server1にユーザIDを転送できるようにするには、constrained delegationを実装します。あなたがそれに対して強いセキュリティ要件を持っていない限り、私は最初のアプローチをとるでしょう。

+0

こんにちは、ありがとうございました。私はソリューション1と多少混同しています.WebAPIプロジェクトでApplicationPoolIdentityを変更する必要があるのはなぜですか? WebAPIが信頼するサービスアカウントの下で動作するMVC Webアプリケーションであってはなりませんか?また、私はloopbackcheckhttpsを無効にすることについてこのリンクを発見しました://blogs.technet.microsoft.com/sharepoint_foxhole/2010/06/21/disableloopbackcheck-lets-do-it-the-right-way/ - ループバックはdoublehopと同じですか?それを無効にする問題はありますか?ありがとうございます – SkelDave

+0

ApplicationPoolIdentityはActive Directoryの観点から見たサービスアカウントではないので、外に出ると認証されないため、401が表示されます。 – bsoulier

+0

私の意図したことは:MVCアプリケーションをActive Directoryアカウント、ApplicationPoolIdentityの下のAPI?または両方がサービスアカウントの下で実行されますか?ありがとう。 – SkelDave