如何确定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