企業環境内には、Web APIサービスと、RestSharpライブラリを介してそのサービスを呼び出す別のWebサイトの両方をホストするIIS7.5があります。両方とも現在Windows認証で構成されています。
ブラウザでどちらかに移動すると、Windowsの資格情報を入力するように求められ、すべてがうまく機能します...必要なWebページを取得し、RESTサービスが吐き出しますデータ。両方の認証に単一の認証情報を使用する方法に苦労しています。Webサイトの認証情報をサービスに渡す方法がわかりません(なりすましを試みましたが、うまくいきませんでした)。または、ユーザーにユーザー名/パスワードを手動で要求し、「Windows」で認証します。
初心者を助けますか?
Webサイトで偽装を使用していて、APIが同じサーバーで実行されている場合、機能します。
http://msdn.Microsoft.com/en-us/library/aa292118(v = vs.71).aspx
ただし、APIをサイトとは別のサーバーに移動すると、機能しなくなります。 2サーバー構成では、Kerberos委任が必要です。
Web APIの設定
Windows Authentication
を有効にするWebアプリケーションの設定
Windows Authentication
を有効にする<identity impersonate="true" />
に<system.web>
を追加しますWeb.configに次を追加します。
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
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)