2013-03-20 64 views
4

我有一個Web服務需要BASIC認證頭出現在請求中,否則服務將返回HTTP 401(未授權)。這是有效的 - 當挑戰回來時,瀏覽器(在這種情況下,Chrome)彈出並詢問憑據。然後保存它們以備將來使用。默認情況下發送BASIC認證,而不是等待HTTP 401

我的問題是,現在兩個請求正在對服務的每個後續請求進行 - 一個沒有auth(它接收401),然後瀏覽器立即在標題中回覆正確的身份驗證。

有沒有辦法強制瀏覽器(也許通過一個特殊的標題)提供憑據,而不必每次都被Web服務明確要求?

回答

3

我不認爲有可能強制瀏覽器搶佔401.當您的服務請求服務響應與HTTP 401並添加WWW-Authenticate基本標題以及,我猜測,一個領域(你可以定義)。

值得一看RFC的基本認證,詳細介紹如何實現基本認證標準。 http://www.ietf.org/rfc/rfc2617.txt

你也可以看看實現你自己的HTTP模塊,它應該給你在你的應用程序中更靈活,以及你如何處理基本認證。這使您可以註冊Authenticate和End Request事件的事件處理程序,並更清晰地指出您的服務將如何處理基本身份驗證。在asp.net網站上可以找到這樣的入門書。 http://www.asp.net/web-api/overview/security/basic-authentication

如果你的服務利用基於應用程序的認證不同的認證(例如,該服務將只使用時,應用程序配置爲窗體身份驗證基本身份驗證),比使用HTTP模塊將允許你有條件地使用基本身份驗證。我通常在這種情況下注冊我的處理程序,如下所示:

AuthenticationSection config = (AuthenticationSection)WebConfigurationManager.GetSection("system.web/authentication"); 

if(config.Mode == AuthenticationMode.Forms) 
{ 
    module.Authenticate += OnEnter; 
    context.EndRequest += OnLeave; 
} 
+0

+1;我已經處理了自己的基本auth服務器端,並且用頭來響應,並且瀏覽器最終將其解決。我的問題是瀏覽器,我不知道是否有一個標準的方式,使其表現更好。 – theMayer 2013-04-13 05:10:17

+0

我相信你在第1段和第2段的觀察中是正確的(其他帖子與我的情況無關)。此問題似乎已在更高版本的Chrome中得到解決,因爲它現在會自動發送auth。 – theMayer 2013-07-05 17:13:21

+0

這是甚麼標準? – 2016-12-21 10:30:57