簡體   English   中英

為什么使用“新的NetworkCredential(用戶名,密碼)”不適用於我的網站的基本身份驗證(來自WinForms C#應用程序)?

[英]why is use of “new NetworkCredential(username, password)” not working for Basic Authentication to my website (from a WinForms C# app)?

我有一個使用基本身份驗證(用戶名/密碼)的網站。

為什么以下代碼不起作用? 當我運行它時,Web應用程序將我帶到登錄控制器,而我期望它應該已經過身份驗證,因為我正在填充憑據。 換句話說,我試圖確認如何在.NET中確認我的winforms HttpWebRequest,以便它將自動化身份驗證過程。 我假設NetworkCredential是應該這樣做的.net類? 或者在.NET中,您是否期望有一些手動兩步過程需要自己實現?

這是代碼:

    // Create a new webrequest to the mentioned URL.            
    var uri = new Uri("http://10.1.1.102:3000/download/sunset");
    var myWebRequest = (HttpWebRequest)WebRequest.Create(uri);            
    myWebRequest.PreAuthenticate=true;            
    var networkCredential=new NetworkCredential("test", "asdfasdf");                        
    myWebRequest.Credentials=networkCredential;
    var myWebResponse = (HttpWebResponse)myWebRequest.GetResponse();

    Console.Out.WriteLine("STATUS = " + myWebResponse.StatusCode);

    var stream = myWebResponse.GetResponseStream();
    var reader = new StreamReader(stream);
    string text_read = reader.ReadToEnd();
    Console.WriteLine(text_read);
    DisplayHtml(text_read);
    reader.Close();
    stream.Close();
    myWebResponse.Close();

謝謝

除非網站質疑,否則WebRequest不會發送憑據。 該站點應首先使用WWW-Authenticate標頭響應401'Requireization Required'; WebRequest將使用憑據響應挑戰,服務應響應200 Http內容。

聽起來網站沒有正確實現Basic auth(規范說它應該首先挑戰,傳入領域)這是一種非常常見的行為。 您可以手動將基本身份驗證添加到WebRequest.Headers集合,這是大多數開發人員最終要做的事情。

請參閱HttpWebRequest不傳遞憑據

如果有人正在尋找服務器端修復程序,那么只需添加即可

HttpContext.Response.Headers.Add("WWW-Authenticate", "Basic realm=\"MyRealm\"");

設置StatusCode = 401后

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM