到目前为止,除了谈论故障转移之外,我无法找到针对多个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>
答案 0 :(得分:1)
只需使用JAAS提供的功能。将这两个配置添加到登录模块链,并将其中第一个flag
设置为sufficient
值(查看Configuration类以获取所有选项及其说明。)
为获得最佳性能:第一个配置应该是用户更经常进行身份验证的配置。
<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
个实例。