如何確定REST Web服務是使用Basic,Kerberos,NTLM還是其他許多身份驗證方法之一?確定Web HTTP身份驗證方法
回答
當你發送一個未經身份驗證的請求服務必須有迴應「HTTP/1.1 401未經授權」,並響應包含一個WWW-Authenticate
頭,以指定的認證計劃預計(Basic
,Digest
),安全領域以及其他任何具體的價值(如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樣式的服務描述來發現使用的驗證方案先驗。
如果是黑匣子場景,我通常會連接Fiddler,並檢查實際流量。
您向它發送了一個請求,大概會得到一個HTTP 401代碼,並查看WWW-Authenticate
標頭(RFC 2616)響應MUST
包含的標頭。如果您得到403或其他奇怪的狀態,或者缺少WWW-Authenticate
標題,那麼您會對不遵循核心HTTP RFC的網站作者詛咒,並開始嗅探流量以嘗試對他們已經完成的非標準混亂進行反向工程這個時間;-)。
我希望我可以選擇兩個有效答案,問題是REST服務沒有返回WWW-Authenticate標頭,所以我不得不手動添加包含以下代碼的標頭: http://devproj20.blogspot.com/ 2008/02/assigning-basic-authorization-http.html – Seph 2010-08-12 00:26:43
@ Seph,是的,網絡周圍的網站數量是驚人的,不是嗎?無論RFC多麼清晰(它並沒有比'必須'清楚得多;-)還是有很多'程序員'(HA!)認爲他們太特殊了,不得不閱讀或遵守,無聊的文檔... :-( – 2010-08-12 02:14:41
- 1. gSOAP HTTP身份驗證
- 2. HTTP身份驗證cPanel
- 3. Web API - HTTP標頭中的身份驗證憑證與SSL身份驗證?
- 4. finishedWithAuth身份驗證方法
- 5. PHP HTTP身份驗證驗證失敗
- 6. Pentaho身份驗證方法
- 7. Facebook身份驗證方法
- 8. HTTP摘要身份驗證
- 9. HTTP簡單身份驗證與POST表單身份驗證
- 10. Authlogic - 通過基本HTTP身份驗證進行身份驗證
- 11. 使用HTTP身份驗證
- 12. Symfony2自定義身份驗證方法
- 13. PHP自定義身份驗證方法
- 14. Asp.net web API 2身份驗證身份
- 15. 基本HTTP身份驗證
- 16. http身份驗證緩存
- 17. Php重定向與http身份驗證
- 18. 使用PHP身份驗證的HTTP身份驗證
- 19. 與基本身份驗證的HTTP基本身份驗證
- 20. HTTP身份驗證VS OAuth VS HttpClient身份驗證
- 21. 禁用其他身份驗證的HTTP基本身份驗證
- 22. Web服務身份驗證
- 23. Web API - MVC - 身份驗證
- 24. Android身份驗證和Web
- 25. 身份驗證的Web API
- 26. 在ASP .NET Web Api中打開身份驗證身份驗證
- 27. AngularJS $ http,CORS和http身份驗證
- 28. 避免NTLM身份驗證方法
- 29. 多重身份驗證方法Apache HTTP客戶端4.3+
- 30. AJAX HTTP基本身份驗證解決方法
的問題是,REST服務沒有返回任何WWW-Authenticate頭在401,所以我不得不手動指定標頭 – Seph 2010-08-12 00:27:20
我只需要1便士爲每個網站,這樣做(不正確的挑戰處理基本),我可以退休... – 2010-08-12 00:38:18