web-dev-qa-db-ja.com

Windows認証を必要とするWebページへのWeb要求を行う

.netのWebRequestクラスを使用して、Webページにリクエストを送信しようとしています。私が読み込もうとしているURLは、Windows認証を必要とするため、無許可の例外が発生します。この要求にWindows認証情報を渡して、認証できるようにする方法を教えてください。

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create( "http://myapp/home.aspx" );

request.Method = "GET";
request.UseDefaultCredentials = false;
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential( "username", "password", "domain" );

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Raises Unauthorized Exception

this.Response.Write( response.StatusCode );

上記のコードは次のエラーを返します。

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

例外の詳細を確認しているときに気づいたのは、アクセスしようとしているURLが別のURLにリダイレクトされ、NTログインの詳細を提供するように促されていることです。資格情報もこのURLに転送されるべきだと思います。しかし、どうやらそれは起こっていません。

35
Hemanshu Bhojak

Windows資格情報を渡すリンクAにアクセスしようとしています。次に、リンクAは自動的にリンクBにリダイレクトしますが、指定したWindows資格情報を渡しません。したがって、エラー。 request.AutoRedirect = falseを実行し、ヘッダーの場所を取得するたびにループしました。つまり、Windows資格情報を渡すたびに手動でリダイレクトを行います。

これは私のために働いた:)

9
Hemanshu Bhojak

Credentials プロパティを使用して、Windows資格情報をWebサービスに渡す必要があります。

現在のWindowsユーザーの資格情報をサービスに渡す場合は、

request.Credentials = CredentialCache.DefaultCredentials;

トリックを行う必要があります。それ以外の場合は、次のように NetworkCredential を使用します。

request.Credentials = new NetworkCredential(user, pwd, domain);
39
VinayC

WebServiceへの認証には、DefaultCredentialsではなくDefaultNetworkCredentialsを使用します。

request.Credentials = CredentialCache.DefaultNetworkCredentials;
8

VS2015を使用、request.UseDefaultCredentials = true;私のために働く!

6
Rob Bowman