这是我旧的 ldap 连接代码
这会创建一个名为“login”的 javax loginModule,因此当请求通过 JMS 时,我们的应用程序会查找名为“login”的 javax LoginContext,并使用登录上下文和处理用户名/密码的回调处理程序调用 login()。用户名和密码由用户/GUI 的消息提供。
<security-domain name="login" cache-type="default">
<authentication>
<login-module code="org.jboss.security.auth.spi.LdapLoginModule" flag="required">
<module-option name="java.naming.provider.url" value="${java.naming.provider.url}"/>
<module-option name="principalDNPrefix" value="${principalDNPrefix}"/>
<module-option name="principalDNSuffix" value="${principalDNSuffix}"/>
<module-option name="com.sun.jndi.ldap.connect.timeout" value="${ldap.connect.timeout}"/>
</login-module>
</authentication>
</security-domain>
这是我将其翻译成 elytron 的努力: 安全领域:
<security-realms>
<ldap-realm name="ldapRealm" dir-context="ldapDirContext" direct-verification="true" allow-blank-password="true">
<identity-mapping rdn-identifier="uid" search-base-dn="ou=company,dc=compauth,dc=comp,dc=de" />
</ldap-realm>
<caching-realm name="cached-ldap" realm="ldapRealm"/>
</security-realms>
目录上下文
<dir-contexts>
<dir-context name="ldapDirContext" url="${java.naming.provider.url}" authentication-level="none">
<properties>
<property name="com.sun.jndi.ldap.connect.timeout" value="${ldap.connect.timeout}"/>
</properties>
</dir-context>
</dir-contexts>
安全域:
<security-domains>
<security-domain name="login" default-realm="cached-ldap" permission-mapper="default-permission-mapper">
<realm name="cached-ldap" role-decoder="groups-to-roles"/>
</security-domain>
</security-domains>
我收到错误:没有为“登录”配置 LoginModules。
WARN [org.security.login.LoginServiceAbstract] (loginJmsContainer-2) LoginServiceBean.login exception occured : javax.security.auth.login.LoginException: No LoginModules configured for login
at javax.security.auth.login.LoginContext.init(LoginContext.java:264)
at javax.security.auth.login.LoginContext.<init>(LoginContext.java:417)
at gts.common.refdata.core.platform.security.login.LoginServiceAbstract.login(LoginServiceAbstract.java:83)
at gts.common.refdata.core.platform.security.login.LoginServiceAbstract.login(LoginServiceAbstract.java:68)
...
其工作方式不适用于 Elytron。 elytron 创建的没有可在运行时使用的登录模块。因此,拥有不依赖于 Elytron 的自定义 ldap 实现会更容易。