带有证书和 LDAP 登录模块的 JBoss 密码堆栈

Posted

技术标签:

【中文标题】带有证书和 LDAP 登录模块的 JBoss 密码堆栈【英文标题】:JBoss Password Stacking with Certificate and LDAP Login Modules 【发布时间】:2015-12-20 20:27:48 【问题描述】:

我正在尝试为我的 JBoss EAP 6 应用程序配置一个安全域,其中主要的身份验证方式是智能卡,但在没有智能卡的情况下将接受 LDAP 身份验证。 我已经能够做任何一个,但不能同时做。密码堆叠选项应该允许每个模块运行,例如,允许 LDAP 模块检索角色,即使证书模块已返回用户身份。 但是,应用程序的 web.xml 需要使用 auth-method 指定 login-config。对于证书,这是 CLIENT-CERT,对于 LDAP,它是 BASIC。 有没有人找到让这两个模块成功链接在一起的方法? 我的独立安全域如下所示:

    <security-domain name="MySecurityDomain" cache-type="default">
<authentication>
    <login-module code="Certificate" flag="required">
        <module-option name="password-stacking" value="useFirstPass"/>
        <module-option name="securityDomain" value="MySecurityDomain"/>
        <module-option name="verifier" value="org.jboss.security.auth.certs.AnyCertVerifier"/>
    </login-module>
    <login-module code="LdapExtended" flag="required">
        <module-option name="password-stacking" value="useFirstPass"/>
        <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
        <module-option name="java.naming.security.authentication" value="simple"/>
        <module-option name="java.naming.provider.url" value="ldap://my.fully.qualified.domain:389"/>
        <module-option name="bindDN" value="FULLY\username"/>
        <module-option name="bindCredential" value="mypassword"/>
        <module-option name="baseCtxDN" value="CN=Users,DC=fully,DC=qualified,DC=domain"/>
        <module-option name="baseFilter" value="(sAMAccountName=0)"/>
        <module-option name="rolesCtxDN" value="CN=Users,DC=fully,DC=qualified,DC=domain"/>
        <module-option name="roleFilter" value="(member=1)"/>
        <module-option name="roleAttributeIsDN" value="true"/>
        <module-option name="roleAttributeID" value="memberOf"/>
        <module-option name="roleNameAttributeID" value="name"/>
        <module-option name="allowEmptyPasswords" value="false"/>
    </login-module>
    <login-module code="org.picketlink.identity.federation.bindings.jboss.auth.RegExUserNameLoginModule" flag="optional">
        <module-option name="regex" value="CN=(.*?),"/>
    </login-module>
    <login-module code="Database" flag="required">
        <module-option name="password-stacking" value="useFirstPass"/>
        <module-option name="dsJndiName" value="java:jboss/datasources/myDS"/>
        <module-option name="rolesQuery" value="select role, 'Roles' from Principal where name=?"/>
    </login-module>
</authentication>
<jsse truststore-password="mykeypass" truststore-url="$jboss.server.config.dir/truststore.jks" client-auth="true"/>
<audit>
    <provider-module code="LogAuditProvider"/>
</audit>

【问题讨论】:

【参考方案1】:

密码堆叠 可选的 设置为 useFirstPass 以指示此登录模块应查找存储在 LoginContext 中的信息以用作身份。当将其他登录模块与该登录模块堆叠时,可以使用此选项。默认为假

我瘦健的ldap模块不要放这个可选值

【讨论】:

以上是关于带有证书和 LDAP 登录模块的 JBoss 密码堆栈的主要内容,如果未能解决你的问题,请参考以下文章

在 jboss 中将带有 JAAS 登录模块的数据源部署为 .sar

Java Ldap单点登录,如何获取Ldap server的证书

使用LDAP登录模块进行Teiid VDB数据虚拟化的身份验证失败

使用登录名和密码或证书进行身份验证

带有 LDAP 注销的 Spring Security 无法删除会话

如何使用带有 LDAP 的 Spring Security 获取用户信息