在 Glassfish 3.0 安全领域中使用 bcrypt

Posted

技术标签:

【中文标题】在 Glassfish 3.0 安全领域中使用 bcrypt【英文标题】:Using bcrypt in a Glassfish 3.0 security realm 【发布时间】:2011-12-16 18:51:15 【问题描述】:

我目前正在将 Web 应用程序中的密码处理从 unsalted MD5 更改为 bcrypt。这是一个标准的 JSF 应用程序,在 Glassfish 3.0.1 上运行。 使用 jBCrypt 可以很容易地创建和存储哈希值。但是现在我不知道如何在用户登录时在实际身份验证中使用 bcrypt。由于它是 JSF,因此使用 HttpServletRequest#login 方法触发登录,其余的由 Java EE 堆栈和 Glassfish 处理。

简单地将安全领域摘要算法设置为“无”,然后在将密码传递给登录方法之前对其进行哈希处理是行不通的,因为我没有在创建哈希时最初使用的生成的盐 jBCrypt。 我也考虑过提供自定义安全领域的实现,但对于这么小的变化来说,这似乎有很多工作。

有没有更简单的解决方案?或者有人已经实现了类似的安全领域?

【问题讨论】:

这是你仍然感兴趣的东西吗?我为我当前的项目构建了一个小自定义领域。如果你告诉我,我会清理它并把它和一些文档放在 github 上。 @ChadWilson,我很想看看你为此做了什么。 快速仅供参考:最后我将 Glassfish 中的摘要算法设置为“无”并在应用程序中实现散列。不幸的是,我无法使用 bcrypt(没有足够的时间进行必要的更改)。相反,应用程序现在使用具有多次迭代的慢散列算法,从固定盐开始,然后在所有后续迭代中使用最后一个散列作为盐。不是最好的解决方案,但仍然相当安全。 【参考方案1】:

实现一个登录模块就足够了,并将身份验证委托给底层领域。

【讨论】:

以上是关于在 Glassfish 3.0 安全领域中使用 bcrypt的主要内容,如果未能解决你的问题,请参考以下文章

Glassfish 安全 - jdbcRealm:如何使用 SHA-256 摘要配置登录

httpOnly Session Cookie + Servlet 3.0(例如 Glassfish v3)

如何在 AWS Elastic Beanstalk、连接池和领域上配置 Glassfish

使用 Servlet 3.0 以编程方式控制登录

Glassfish 在领域身份验证中创建多个 http 会话

glassfish jdbcrealm身份验证中的受限页面未触发登录