.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に転送されるべきだと思います。しかし、どうやらそれは起こっていません。
Windows資格情報を渡すリンクAにアクセスしようとしています。次に、リンクAは自動的にリンクBにリダイレクトしますが、指定したWindows資格情報を渡しません。したがって、エラー。 request.AutoRedirect = falseを実行し、ヘッダーの場所を取得するたびにループしました。つまり、Windows資格情報を渡すたびに手動でリダイレクトを行います。
これは私のために働いた:)
Credentials プロパティを使用して、Windows資格情報をWebサービスに渡す必要があります。
現在のWindowsユーザーの資格情報をサービスに渡す場合は、
request.Credentials = CredentialCache.DefaultCredentials;
トリックを行う必要があります。それ以外の場合は、次のように NetworkCredential を使用します。
request.Credentials = new NetworkCredential(user, pwd, domain);
WebServiceへの認証には、DefaultCredentialsではなくDefaultNetworkCredentialsを使用します。
request.Credentials = CredentialCache.DefaultNetworkCredentials;
VS2015を使用、request.UseDefaultCredentials = true;
私のために働く!