2010-08-11 57 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