web-dev-qa-db-ja.com

ASP.NET HTTP認証ヘッダー

Asp.netアプリケーションが「Authorization」という名前の投稿にヘッダーを追加しないのに、「Authorizations」などの1文字を変更しても正常に機能する理由を知りたいと思います。他のサイトのドキュメントでは、常に「Authorization」という名前を使用しているので、私もそう思います。この時点で、理由を理解したいだけです。

これについていくつかのトピックを読みましたが、論理的な理由は見つかりませんでした。

以下は私のコードです:

string fileName = "c:\\xyz.xml";
string uri = "http://myserver/Default.aspx";
req = WebRequest.Create(uri);
req.Method = "POST";
req.ContentType = "text/xml";
byte[] authBytes = Encoding.UTF8.GetBytes("DDSServices:jCole2011".ToCharArray());
req.Headers.Add("Authorization", "BASIC " + Convert.ToBase64String(authBytes) );
req.Headers.Add("test", "test");
UTF8Encoding encoder = new UTF8Encoding();
byte[] data = encoder.GetBytes(this.GetTextFromXMLFile(fileName));
req.ContentLength = data.Length;
Stream reqStream = req.GetRequestStream();
reqStream.Write(data, 0, data.Length);
reqStream.Close();
req.Headers.Add("Authorization", "BASIC" + Convert.ToBase64String(authBytes));
System.Net.WebResponse response = req.GetResponse();
System.IO.StreamReader reader = new StreamReader(response.GetResponseStream());
string str = reader.ReadToEnd();

他の迷惑なことは、fiddlerを介して監視対象の変数を追加すると、うまく機能することです。

25
Cody

認証/資格情報をヘッダーに追加する方法について質問されました。私は次の方法で解決策を見つけました。

string _auth = string.Format("{0}:{1}", "myUser","myPwd");
string _enc = Convert.ToBase64String(Encoding.ASCII.GetBytes(_auth));
string _cred = string.Format("{0} {1}", "Basic", _enc);
req.Headers[HttpRequestHeader.Authorization] = _cred;

これにより、必要なヘッダーが提供されました(Wiresharkの説明を貼り付けました)。

承認:基本bXlVc2VyOm15UHdk\r\n
資格情報:myUser:myPwd

42
Independent

HTTP基本認証の場合は、Credentialsプロパティを使用する必要があります。

req.Credentials = new NetworkCredential("DDSServices", "jCole2011");

これはあなたが望むことをするはずです。 Authorizationヘッダーを設定するのではなく。

11
user111013

NetworkCredentialは優れたソリューションですが、呼び出しているサイトは、応答で401 AND WWW-Authenticateヘッダーを使用して不正を処理する必要があります。

クライアント:

request.Credentials = new CredentialCache {{aUri, "Basic", new NetworkCredential(aUserName, aPassword)}};

サーバ:

Response.ClearContent();
Response.StatusCode = 401;
Response.AddHeader("WWW-Authenticate", "Basic");
Response.End();

これにより、サーバーへの2ヒットが発生します。最初の呼び出しは、資格情報なしでサーバーに送られます。サーバーが401 AND WWW-Authenticateヘッダー(必要な認証の種類)で応答すると、要求は要求内の資格情報で再送信されます。

3
Hupperware