首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Caucho Resin Digest认证CustomAuthenticator,谁来开导我

Caucho Resin Digest认证CustomAuthenticator,谁来开导我
EN

Stack Overflow用户
提问于 2012-02-15 02:32:38
回答 1查看 106关注 0票数 0

好的,在做了一些实验之后,我发现resin调用了我的AbstractAuthenticator实现的"authenticate“方法,该方法接受一个HttpDigestCredentials对象,而不是DigestCredentials (仍然不知道什么时候会调用它们中的每一个)。问题是HttpDigestCredentials没有getDigest()方法,相反,它有一个getResponse()方法,它不返回散列,或者至少不返回可比较的散列。

在创建我自己的[user:realmassword方法:uri]散列之后,散列非常不同,实际上我认为getResponse()不会返回摘要,而可能是服务器对浏览器的响应?

无论如何,这是我的调试日志:

代码语言:javascript
复制
USER:user:PASSWORD:password:REALM:resin:METHOD:GET:URI/appe/appe.html:NONCE:HsJzN+j+GQD:CNONCE:b1ad4fa1ba857cac88c202e64528bc0c:CLIENTDIGEST:[B@5dcd8bf7:SERVERDIGEST:I4DkRCh21YG2Mk14iTe+hg==

正如您所看到的,假设的客户端现时值与服务器生成的现时值非常不同,实际上客户端现时值看起来根本不像MD5散列。

以前有没有人这样做过?HttpDigestCredentials中是否缺少某些内容?我知道digest很少使用。

请,我知道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相同的哈希值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-17 02:55:33

好了,我终于成功了。奇怪的主题哈,只有两个视图?

首先,摘要式身份验证使用用户、密码、域、随机数、client_nonce、nonce_count、方法、qop和uri。基本上,它使用完整的摘要规范。因此,为了计算散列,必须用所有的口哨来计算它。只需为HttpDigestCredentials中除user和password之外的每个变量调用get方法即可。用户将以主体和密码的形式出现,您必须自己在DB (在我的例子中是DB4O数据库)中查找它。

然后,您必须创建一个PasswordDigest对象,该对象负责使用getPasswordDigest()方法生成散列,但首先必须使用passwordDigestObject.setFormat(“十六进制”)将格式设置为十六进制。

有一个用于HA1 getPasswordDigest(用户,密码,领域)的方法,还有另一个getPasswordDigest()方法,它只接受一个字符串,可以用它来生成其余的散列,包括HA2和之前的散列HA1最终的散列,当然还有现时值nonce_count client_nonce和qop,当然每个散列都用分号分隔。

接下来就是棘手的部分了,虽然resin使用base64编码进行摘要,但当你从HttpDigestCredentials调用getResponse()方法时,它会返回一个字节数组(这很奇怪),所以为了与你的散列进行比较,我使用了org.apache.commons.codec.binary.Hex的Hex.encodeHexString()方法,并传递了HttpCredentialsDigest getResponse()返回值,这将给出一个很好的十六进制字符串进行比较。

相反,我使用的是来自PasswordDigest的Base64散列,并将HttpDigestCredentials散列转换为Base64,结果字符串永远不会相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9282257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档