是否可以将容器管理的身份验证与密码加盐一起使用?

Posted

技术标签:

【中文标题】是否可以将容器管理的身份验证与密码加盐一起使用?【英文标题】:Is it possible to use container-managed authentication with password salting? 【发布时间】:2011-05-23 17:46:24 【问题描述】:

我知道如何设置使用表单身份验证和使用摘要密码(例如 SHA-256)的 vanilla 容器管理的安全性。像这样的:

web.xml

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>jdbc</realm-name>
    <form-login-config>
        <form-login-page>/login.jsf</form-login-page>
        <form-error-page>/login-error.jsf</form-error-page>
    </form-login-config>
</login-config>

login.xhtml

<form action="j_security_check">
    <p><label>
        Username:<br/>
        <input type="text" name="j_username" />
    </label></p>
    <p><label>
        Password:<br/>
        <input type="password" name="j_password" />
    </label></p>
    <p>
        <button type="submit">Submit</button>
    </p>
</form>

非常简单 - 但我真正希望能够使用全局盐和用户名对密码进行加盐。是的,我知道this isn't ideal,但现在,我只是在构建一个概念验证。

容器(在本例中为 GlassFish 3)可以为我执行此操作,还是我必须 write my own login filter?我以前做过(针对 J2EE 应用程序),但我的直觉告诉我,现在我使用的是 Java EE 6,所以必须有一种更紧凑的方法。

【问题讨论】:

所有默认安全领域都忽略了对密码进行加盐,还有其他人对此感到惊讶吗?除了滚动您自己的登录模块之外,似乎还没有一种简单的方法可以让密码加盐? 【参考方案1】:

我感觉您正在寻找一种快速(可能很脏?)的方法来修改内置身份验证提供程序。

正确的方法是为新的 JASPIC API (JSR-196) 实现您自己的 Java 身份验证服务提供程序。它比较费力,但是这种方法可以让您以任何喜欢的方式滚动实现,并且它应该与任何 Java EE 6 应用程序服务器兼容。

对于带有密码加盐的基本身份验证方案,实现这样的提供程序应该非常简单。您将不得不考虑管理用户和密码,但一种解决方案可能是让您的提供商重新使用 Glassfish 身份验证领域中定义的用户,这样您只需自己管理自定义加盐密码。

有一个很好的 WebSphere 教程,您应该能够适应 Glassfish here。

【讨论】:

WebSphere 教程已移动:pic.dhe.ibm.com/infocenter/wasinfo/v8r0/…

以上是关于是否可以将容器管理的身份验证与密码加盐一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Node.js 和 MongoDB 存储密码

您将如何在 Tomcat 5.5 中实现加盐密码

加盐哈希以验证明文(不是密码)

将用户密码从加盐 SHA1 升级到 bcrypt

将Flutter应用程序的Facebook身份验证与Keycloak服务集成在一起

如何针对密码的特定字母进行身份验证[重复]