web-dev-qa-db-ja.com

クライアントからWeb APIサービスにWindows認証資格情報を渡す方法

企業環境内には、Web APIサービスと、RestSharpライブラリを介してそのサービスを呼び出す別のWebサイトの両方をホストするIIS7.5があります。両方とも現在Windows認証で構成されています。

ブラウザでどちらかに移動すると、Windowsの資格情報を入力するように求められ、すべてがうまく機能します...必要なWebページを取得し、RESTサービスが吐き出しますデータ。両方の認証に単一の認証情報を使用する方法に苦労しています。Webサイトの認証情報をサービスに渡す方法がわかりません(なりすましを試みましたが、うまくいきませんでした)。または、ユーザーにユーザー名/パスワードを手動で要求し、「Windows」で認証します。

初心者を助けますか?

14
Jim Last

Webサイトで偽装を使用していて、APIが同じサーバーで実行されている場合、機能します。

http://msdn.Microsoft.com/en-us/library/aa292118(v = vs.71).aspx

ただし、APIをサイトとは別のサーバーに移動すると、機能しなくなります。 2サーバー構成では、Kerberos委任が必要です。

9
Anders Bornholm

Web APIの設定

  1. Windows Authenticationを有効にする

Webアプリケーションの設定

  1. Windows Authenticationを有効にする
  2. Web.configの<identity impersonate="true" /><system.web>を追加します
  3. Web.configに次を追加します。

     <system.webServer>
         <validation validateIntegratedModeConfiguration="false" />
     </system.webServer>
    
  4. IIS内でWindows AuthenticationおよびASP.NET Impersonationを有効にします

次のコードを使用して、POST Web APIへのデータ(および明らかにGETも))

using (var client = new WebClient { UseDefaultCredentials = true })
{
    client.Headers.Add(HttpRequestHeader.ContentType, "application/xml; charset=utf-8");
    byte[] responseArray = client.UploadData("URL of web API", "POST", Encoding.UTF8.GetBytes(XMLText));
    string response = Encoding.ASCII.GetString(responseArray);
}

[〜#〜] note [〜#〜]:それでも401エラーが発生する場合は、通常のIPアドレスの代わりにIPアドレスを使用する必要があります。 URLのドメイン名(例:mycompany.comの代わりに155.100.100.10)