我开始了一个设置基本身份验证的项目。现在我想切换到摘要身份验证。问题是,只有当我提供实际密码的哈希值而不是实际密码时,身份验证才会被验证。
我做了以下操作从BASIC切换到DIGEST:
-
更改了my web.xml中的auth-method to DIGEST
-
将JDBC Realm的JAAS上下文更改为"jdbcDigestRealm"
-
在我的数据库中,我曾经有"密码"作为密码,我更改为MD5的结果(webuser:postgres:webuser)(其中webuser是登录,webuser是密码,而postgres是领域),换句话说,我将我的表中的密码设置为c3c2681ed07a5a2a5cb772061a8385e8。
我遇到的问题是,当我尝试访问资源时,浏览器显示登录弹出窗口,但使用"webuser"作为密码不起作用。但是,使用"c3c2681ed07a5a2a5cb772061a8385e8"作为密码可以工作。看起来我还在BASIC认证模式。
有线索吗?
DIGEST auth-method与HTTP DIGEST Authentication相同。它只是对浏览器和服务器之间的通信进行加密。服务器仍然有明文密码。
从http://java.boot.by/wcd-guide/ch05s03.html:
基本认证和摘要认证的区别在于浏览器与服务器之间的网络连接,密码为加密,即使在非ssl连接上也是如此。在服务器端,密码可以存储在明文或加密文本,这是真的吗登录方法的选择与应用程序的选择无关部署人员。
应将JDBC Realm
的digest-algorithm
属性设置为MD5
。之后,JDBC Realm将散列密码。
也许您需要将领域视图中的摘要算法从glassfish控制台更改为MD5。GlassFish 3.0的默认值。*仍然是MD5,但来自GlassFish 3.1。*已更改为SHA-256。这可能是解决方案。
Adem