【发布时间】:2012-02-14 18:32:37
【问题描述】:
好的,经过一点实验,我发现resin调用了我的AbstractAuthenticator实现“身份验证”方法,该方法采用HttpDigestCredentials对象而不是DigestCredentials(仍然不知道何时调用它们中的每一个)问题是HttpDigestCredentials没有 getDigest() 方法,而是有一个 getResponse() 方法,该方法不返回散列或至少不返回可比较的散列。
创建我自己的 [[user:realmassword] [nonce] [method:uri]] 哈希后,哈希非常不同,实际上我认为 getResponse() 不会返回摘要,但可能是服务器对浏览器的响应?.
这就是我的调试日志:
USER:user:PASSWORD:password:REALM:resin:METHOD:GET:URI/appe/appe.html:NONCE:HsJzN+j+GQD:CNONCE:b1ad4fa1ba857cac88c202e64528bc0c:CLIENTDIGEST:[B@5dcd8bf7:SERVERDIGEST:I4DkRCh21YG2Mk14iTe+hg==
正如您所见,假定的客户端 nonce 与服务器生成的 nonce 非常不同,实际上客户端 nonce 看起来根本不像 MD5 哈希。
请问以前有人这样做过吗? HttpDigestCredentials 中是否缺少某些内容?我知道摘要几乎没有使用。
拜托,我知道 SSL,但我还没有 SSL 证书,所以不要告诉我“你为什么不使用 SSL”。 ;)
更新:
不确定这样做是否正确,但正如我之前阅读的那样,Resin 使用 base64 格式的哈希值,所以我使用 apache commons-codec-1.6 来使用 encodeBase64String() 方法,现在哈希值看起来很相似,但它们不是一样。
我都试过passwordDigest.getPasswordDigest(a1+':'+nonce+':'+a2); passwordDigest.getPasswordDigest(a1+':'+nonce+':'+ncount+':'+cnonce+':'+qop+':'+a2);
并且它们都没有提供与 HttpDigestCredentials 中的哈希值相同的哈希值。
【问题讨论】:
标签: digest-authentication resin appserver