我已将Websphere Liberty配置为使用LDAP对用户进行身份验证。我启用了安全跟踪 -
com.ibm.ws.security =所有:com.ibm.ws.webcontainer.security =所有:com.ibm.oauth =所有:com.ibm。 wsspi.security.oauth20 =所有:。com.ibm.ws.transport.http =所有:org.apache.http.client =所有
我在WebSphere Liberty v17.0.0.3
中启用了以下功能列表,
webProfile-7.0
,javaMail-1.5
,ldapRegistry-3.0
和localConnector-1.0
。
但是,安全内容失败,错误为 HTTP 401(未经身份验证)。 在跟踪文件中,我可以看到LDAP能够返回登录的用户数据。但是WebSphere Liberty失败了,错误 -
com.ibm.wsspi.security.wim.model.Entity与com.ibm.wsspi.security.wim.model.LoginAccount不兼容 java.lang.ClassCastException:com.ibm.wsspi.security.wim.model.Entity与com.ibm.wsspi.security.wim.model.LoginAccount不兼容 at com.ibm.ws.security.wim.registry.util.SecurityNameBridge.getUserSecurityName(SecurityNameBridge.java:203) 在com.ibm.ws.security.wim.registry.WIMUserRegistry.getUserSecurityName(WIMUserRegistry.java:316) 在com.ibm.ws.security.authentication.internal.jaas.modules.ServerCommonLoginModule.getSecurityName(ServerCommonLoginModule.java:104)
如果此错误是由于任何配置问题引起的,请帮助指导。
答案 0 :(得分:0)
在更正所使用的注册表配置后问题得以解决。我使用的是LDAP注册表,并将LDAP服务器类型称为Tivoli。这导致从LDAP返回的Subject类中的问题与Liberty中的预期类不匹配。将LDAP服务类型更改为“自定义”后,此错误已得到解决。下面是我在server.xml中使用的LDAP注册表的标记
<ldapRegistry baseDN="ou=xxxxxxxx,o=xxxxxx" host="xxxxxxxxxxxxxxx" id="xxxxxxxxxxx" ldapType="Custom" port="636" realm="xx" recursiveSearch="true" sslEnabled="true" sslRef="sslrepo1">
<customFilters userFilter="(&(mail=%v)(objectclass=ePerson))" userIdMap="*:mail"/>
</ldapRegistry>