2010-08-11 91 views

回答

8

當你發送一個未經身份驗證的請求服務必須有迴應「HTTP/1.1 401未經授權」,並響應包含一個WWW-Authenticate頭,以指定的認證計劃預計(BasicDigest),安全領域以及其他任何具體的價值(如Digets's nonce)。所以如果服務器響應:

HTTP/1.0 401 Unauthorized 
WWW-Authenticate: Digest realm="example.com", 
         qop="auth,auth-int", 
         nonce="...", 
         opaque="..." 

它想要摘要式身份驗證。如果響應看起來像:

HTTP/1.0 401 Unauthorized 
WWW-Authenticate: Basic realm="example.com" 

然後它想要一個基本身份驗證。一些(很差)實施的服務器/站點不能正確處理基本信息,並直接使用403 Forbidden進行響應,而不是首先進行挑戰。

NTLM與服務器響應401和WWW-Authenticate標頭的值爲NTLM類似,但沒有官方公開規範,因爲它是Microsoft專有的。有各種各樣的reverseengineered描述。

不幸的是,REST沒有提供WSDL樣式的服務描述來發現使用的驗證方案先驗

+0

的問題是,REST服務沒有返回任何WWW-Authenticate頭在401,所以我不得不手動指定標頭 – Seph 2010-08-12 00:27:20

+1

我只需要1便士爲每個網站,這樣做(不正確的挑戰處理基本),我可以退休... – 2010-08-12 00:38:18

1

如果是黑匣子場景,我通常會連接Fiddler,並檢查實際流量。

4

您向它發送了一個請求,大概會得到一個HTTP 401代碼,並查看WWW-Authenticate標頭(RFC 2616)響應MUST包含的標頭。如果您得到403或其他奇怪的狀態,或者缺少WWW-Authenticate標題,那麼您會對不遵循核心HTTP RFC的網站作者詛咒,並開始嗅探流量以嘗試對他們已經完成的非標準混亂進行反向工程這個時間;-)。

+0

我希望我可以選擇兩個有效答案,問題是REST服務沒有返回WWW-Authenticate標頭,所以我不得不手動添加包含以下代碼的標頭: http://devproj20.blogspot.com/ 2008/02/assigning-basic-authorization-http.html – Seph 2010-08-12 00:26:43

+0

@ Seph,是的,網絡周圍的網站數量是驚人的,不是嗎?無論RFC多麼清晰(它並沒有比'必須'清楚得多;-)還是有很多'程序員'(HA!)認爲他們太特殊了,不得不閱讀或遵守,無聊的文檔... :-( – 2010-08-12 02:14:41