7

您好,我已阅读Glassfish 3.1.2 的 JDBCRealm 有一个新的密码加密算法字段。它是干什么用的?并搜索了类似的主题,但似乎没有发布明确的答案。

简而言之,我有一个在 glassfish 3 中工作的 jdbc 领域,当我升级到 3.1.2 时,相同的配置不起作用。根据前面的线程,我将 JaasContext 设置为 jdbcDigestRealm(除了 jdbcRealm 也不起作用),将 Digest Algorithm 设置为 MD5(我在 v 3 中使用了 MD5 并且它有效)。对于密码加密算法,我尝试了“空白”和“十六进制”,两者都不起作用。

有人可以告诉我应该如何配置。根据http://jugojava.blogspot.hk/2011/02/jdbc-security-realm-with-glassfish-and.html,我的凭据表基于带有 MD5 哈希密码的 mysql 。

4

5 回答 5

15

我成功使它适用于以下设置。我根据我目前的(错误)理解添加了一些评论。

  • JAASContext = "jdbcRealm" => 该值必须根据文件 'glassfish3/glassfish/domains/domain1/config/login.conf' 设置。默认情况下,“com.sun.enterprise.security.auth.login.JDBCLoginModule”类(实现 JDBCrealm)配置在“jdbcRealm”下。在“jdbcDigestRealm”下配置了另一个登录模块。这不是当前主题的一部分。
  • JNDI = "..." => 我把我的应用程序数据库中已经存在的数据源的名称放在那里。
  • UserTable = "MY_SCHEMA.usertable" => 数据库表的“全限定名”。
  • UserNameColumn = "userid" => 存储用户名的列名
  • PasswordColumn = "password" => 存储用户密码(哈希)的列名。
  • GroupTable = "MY_SCHEMA.grouptable" => 数据库表的“全限定名”。
  • GroupTableUserNameColumn = "" => 不知道这个的用法...
  • GroupNameColumn = "groupid" => 存储用户名的列名
  • AssignGroups = "" => 据我了解 GF 代码,这是一种将组列表分配给在领域中注册的每个用户的方法。这是一种硬编码。GlassFish 上可用的每个领域(可以)或多或少都使用此属性。
  • DatabaseUser = "" => 据我了解,如果您不使用 JNDI(第二个参数),则需要这个。
  • DatabasePassword = "" => 据我了解,如果您不使用 JNDI(第二个参数),则需要这个。
  • DigestAlgorithm = "SHA-256" => 'MD5'、'SHA-1' 或 'SHA-256'。“SHA-256”是默认值。让我们以“SHA-256”为例。
  • PasswordEncryptionAlgorithm = "AES" => 在存储密码之前将摘要算法应用于密码。新的密码加密是一个附加的安全层,它允许对“散列”(DA 后的字符串应用于密码)进行加密。这样,如果攻击者从数据库中检索密码,它们就会被加密和散列。此类数据对攻击者有用的可能性很小。
  • Encoding = "Hex" => 您可以选择“Hex”或“Base64”。Hex对我来说很方便。
  • Charset = "" => 由于我的数据库没有“异国情调”字符集,我认为我不需要在那里设置一些聪明的东西。我把它留空,它可以工作。

希望它会有所帮助。

PS:如果有人有真实文档的链接(不是目前完全没用的官方文档),请在此处放置链接。

于 2012-10-08T13:28:30.347 回答
1

我今天花了一段时间玩这个(Java EE 7,Ubuntu 12.04 上的 Glassfish 4)。事实证明,Realm Page 上的大多数字段都不需要。以下字段是与数据库建立成功连接所需的唯一字段。

  • 领域名称 - 任何名称,只要您在 web.xml 中使用相同的名称

  • JAAS 上下文 - 任何名称

  • JNDI - 任何名称(我使用 jdbc/DB 名称)

  • 用户表 - 包含所有用户的表

  • 用户名列 - 用户表中包含您的用户名的列

  • 密码 - 包含散列密码的列​​ (SHA 256)

  • 组表 - 包含组的表

  • 组名列 - 组表中包含组名的列

我把其他所有内容都留空了。我的数据库密码列使用 SHA 256 对密码进行了哈希处理。

我通过在“密码加密”字段中填写随机文本并保存它来测试这一点。重新部署我的应用程序并重新启动 Glassfish 4。仍然有效。这意味着该字段虽然仍然存在,但不再被读取。

PS - 第一个答案中提到的真实文档仍然很差。

于 2013-12-21T02:12:17.417 回答
0

第一件事。你的日志输出是什么?你的“不工作问题”的症状是什么?是否出现了基本身份验证弹出窗口?你懂吗

No login module configured for jdbcDigestRealm 

或其他错误信息?

如果不成功的登录尝试没有任何日志输出,请更改安全日志级别。

于 2012-09-07T10:37:10.570 回答
0

我对这个jdbcRealm问题有两种变体。第一个存在于使用 GF 3.1.1 创建的域中,该域在将 GF 服务器更新到 3.1.2.2 版本后继续工作。然后我在这台服务器上创建了一个新域。新域是使用jdbcRealm. 除了在 3.1.1 配置屏幕下不存在的“密码加密算法”之外,所有参数与 3.1.1 配置相同。当我尝试使用我的 Web 应用程序登录时,我不断在日志文件中收到“jdbcrealm.invaliduserreason[#]”错误。

我能够解决并成功登录我的应用程序的唯一方法是将 AES 添加到“密码加密算法”字段中。我保存了更改并重新启动了服务器,我再次能够成功地通过jdbcRealm连接对用户进行身份验证。

于 2012-10-23T19:39:44.280 回答
0

这里有一个更详细的指南-> http://is.gd/Jx6Gnp

于 2014-07-06T13:54:16.937 回答