JBoss 7.1.0 安全域:多个 LDAP——顺序的,不是故障转移
JBoss 7.1.0 Security Domain: Multiple LDAPs--sequential, not failover
到目前为止,我无法找到针对多个 LDAP 服务器进行身份验证的帮助,除了谈论故障转移的地方。
我们有一个供内部用户使用的 LDAP 和一个供外部用户使用的 LDAP。突然间,我们的应用程序需要对内部用户和外部用户都可用。我该如何设置?
这是仅供内部用户使用的当前配置:
<security-domain name="dc-ldap-auth">
<authentication>
<login-module code="LdapExtended" flag="required">
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
<module-option name="java.naming.provider.url" value="ldap://dvldap-1.example.com:389"/>
<module-option name="java.naming.security.authentication" value="simple"/>
<module-option name="bindDN" value="uid=someid,ou=People,ou=Intranet,o=example.com"/>
<module-option name="bindCredential" value="somecred"/>
<module-option name="baseCtxDN" value="ou=People,ou=Intranet,o=example.com"/>
<module-option name="baseFilter" value="(uid={0})"/>
<module-option name="rolesCtxDN" value="ou=Groups,ou=Intranet,o=example.com"/>
<module-option name="roleFilter" value="(uniqueMember={1})"/>
<module-option name="roleRecursion" value="0"/>
<module-option name="roleAttributeID" value="cn"/>
<module-option name="searchScope" value="ONELEVEL_SCOPE"/>
</login-module>
</authentication>
</security-domain>
如果您需要简单的配置
只需使用 JAAS 提供的功能即可。将这两个配置添加到登录模块链,并将其中第一个的 flag
设置为 sufficient
值(查看 Configuration class 了解所有选项及其描述)。
为了获得最佳性能:第一个配置应该是用户更频繁地进行身份验证的配置。
<security-domain name="dc-ldap-auth">
<authentication>
<login-module code="LdapExtended" flag="sufficient">
<module-option name="java.naming.provider.url"
value="ldap://internal-ldap.my-company.example"/>
<!-- add other options for the first LDAP server -->
</login-module>
<login-module code="LdapExtended" flag="required">
<module-option name="java.naming.provider.url"
value="ldap://external-ldap.my-company.example"/>
<!-- add other options for the second LDAP server -->
</login-module>
</authentication>
</security-domain>
如果您需要出色的性能
如果您能够确定(例如从登录名)您应该在哪个 LDAP 中搜索,那么我建议您实现自己的登录模块。它可以将处理委托给 LdapExtLoginModule
个实例。
到目前为止,我无法找到针对多个 LDAP 服务器进行身份验证的帮助,除了谈论故障转移的地方。
我们有一个供内部用户使用的 LDAP 和一个供外部用户使用的 LDAP。突然间,我们的应用程序需要对内部用户和外部用户都可用。我该如何设置?
这是仅供内部用户使用的当前配置:
<security-domain name="dc-ldap-auth">
<authentication>
<login-module code="LdapExtended" flag="required">
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
<module-option name="java.naming.provider.url" value="ldap://dvldap-1.example.com:389"/>
<module-option name="java.naming.security.authentication" value="simple"/>
<module-option name="bindDN" value="uid=someid,ou=People,ou=Intranet,o=example.com"/>
<module-option name="bindCredential" value="somecred"/>
<module-option name="baseCtxDN" value="ou=People,ou=Intranet,o=example.com"/>
<module-option name="baseFilter" value="(uid={0})"/>
<module-option name="rolesCtxDN" value="ou=Groups,ou=Intranet,o=example.com"/>
<module-option name="roleFilter" value="(uniqueMember={1})"/>
<module-option name="roleRecursion" value="0"/>
<module-option name="roleAttributeID" value="cn"/>
<module-option name="searchScope" value="ONELEVEL_SCOPE"/>
</login-module>
</authentication>
</security-domain>
如果您需要简单的配置
只需使用 JAAS 提供的功能即可。将这两个配置添加到登录模块链,并将其中第一个的 flag
设置为 sufficient
值(查看 Configuration class 了解所有选项及其描述)。
为了获得最佳性能:第一个配置应该是用户更频繁地进行身份验证的配置。
<security-domain name="dc-ldap-auth">
<authentication>
<login-module code="LdapExtended" flag="sufficient">
<module-option name="java.naming.provider.url"
value="ldap://internal-ldap.my-company.example"/>
<!-- add other options for the first LDAP server -->
</login-module>
<login-module code="LdapExtended" flag="required">
<module-option name="java.naming.provider.url"
value="ldap://external-ldap.my-company.example"/>
<!-- add other options for the second LDAP server -->
</login-module>
</authentication>
</security-domain>
如果您需要出色的性能
如果您能够确定(例如从登录名)您应该在哪个 LDAP 中搜索,那么我建议您实现自己的登录模块。它可以将处理委托给 LdapExtLoginModule
个实例。