2

我开始了一个设置基本身份验证的项目。我现在想切换到摘要式身份验证。问题是,只有当我提供实际密码的哈希值而不是实际密码时,身份验证才会被验证。

我做了以下从 BASIC 切换到 DIGEST:

  1. 在我的 web.xml 中将身份验证方法更改为 DIGEST

  2. 将我的 JDBC 领域的 JAAS 上下文更改为“jdbcDigestRealm”

  3. 在我的数据库中,我曾经有“密码”作为密码,我更改为 MD5(webuser:postgres:webuser) 的结果(其中 webuser 是登录名,webuser 是密码,而 postgres 是领域),在换句话说,我将表中的密码设置为 c3c2681ed07a5a2a5cb772061a8385e8。

我遇到的问题是,当我尝试访问资源时,浏览器会显示登录弹出窗口,但使用“webuser”作为密码不起作用。但是,使用“c3c2681ed07a5a2a5cb772061a8385e8”作为密码有效。看来我仍处于 BASIC 身份验证模式。

有什么线索吗?

谢谢 !

4

2 回答 2

3

DIGEST auth-method 与 HTTP Digest Authentication 相同。它只是加密浏览器和服务器之间的通信。服务器仍然有纯文本密码。

http://java.boot.by/wcd-guide/ch05s03.html

基本身份验证和摘要身份验证之间的区别在于,在浏览器和服务器之间的网络连接上,密码是加密的,即使在非 SSL 连接上也是如此。在服务器中,密码可以以明文或加密文本的形式存储,这适用于所有登录方法,并且与应用程序部署者所做的选择无关。

您应该将您的digest-algorithm属性设置JDBC RealmMD5. 之后,JDBC 领域将对密码进行哈希处理。

于 2011-10-12T21:10:27.143 回答
1

也许您可能需要将领域视图中的摘要算法从 glassfish 控制台更改为 MD5。GlassFish 3.0.* 的默认值仍为 MD5,但 GlassFish 3.1.* 的默认值已更改为 SHA-256。这可能是解决方案。

亚当

于 2011-10-12T08:51:36.887 回答