我正在尝试使用Active Directory作为主要用户存储站起来使用WSO2 Identity Server 5.0.0。我有连接,LDAPS,工作数据库等,可以作为我选择的管理员用户登录管理控制台,并且可以成功搜索AD用户并查看角色。
但是,如果我尝试显示用户的详细信息或更改其密码,则会收到错误。例如,在尝试更改密码时,我会在日志中看到:
TID: [0] [IS] [2016-04-15 16:14:15,135] ERROR
{org.wso2.carbon.user.mgt.ui.UserAdminClient} - User testuser does
not exisit in the user store
{org.wso2.carbon.user.mgt.ui.UserAdminClient}
org.wso2.carbon.user.mgt.stub.UserAdminUserAdminException:
UserAdminUserAdminException
但我已查找此用户并点击了"更改密码"在结果显示中链接,因此它至少能够在搜索中找到该用户。
我怀疑我为LDAP连接配置的用户的AD角色不足以执行这些任务,但我不确定。我是在正确的道路上,如果是这样,对这个用户有什么要求?或者,还有其他问题可以解决与这些错误相关的问题吗?
2016年4月18日更新: 好的,当我在答案(log4j.logger.org.wso2.carbon.user.core = DEBUG)中添加调试建议时,我注意到该工具正在通过CN搜索用户而没有找到它:
TID: [0] [IS] [2016-04-18 10:19:42,394] DEBUG {org.wso2.carbon.identity.mgt.IdentityMgtEventListener} - Pre update credential by admin is called in IdentityMgtEventListener {org.wso2.carbon.identity.mgt.IdentityMgtEventListener}
TID: [0] [IS] [2016-04-18 10:19:42,394] DEBUG {org.wso2.carbon.identity.mgt.IdentityMgtEventListener} - Updating credentials of user astudent16 by admin with a non-empty password {org.wso2.carbon.identity.mgt.IdentityMgtEventListener}
TID: [0] [IS] [2016-04-18 10:19:42,394] DEBUG {org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager} - Searching for user astudent16 {org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager}
TID: [0] [IS] [2016-04-18 10:19:42,409] DEBUG {org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager} - Searching for user with SearchFilter: (&(objectClass=user)(cn=astudent16)) in SearchBase: {org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager}
TID: [0] [IS] [2016-04-18 10:19:42,472] DEBUG {org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager} - Name in space for astudent16 is null {org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager}
TID: [0] [IS] [2016-04-18 10:19:42,472] DEBUG {org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager} - User: astudent16 exist: false {org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager}
TID: [0] [IS] [2016-04-18 10:19:42,487] ERROR {org.wso2.carbon.user.mgt.ui.UserAdminClient} - User astudent16 does not exisit in the user store {org.wso2.carbon.user.mgt.ui.UserAdminClient}
org.wso2.carbon.user.mgt.stub.UserAdminUserAdminException: UserAdminUserAdminException
我回顾了文档,供应商文档建议对于Active Directory,user-mgt.xml中的UserNameAttribute设置为CN - 我们将此设置为sAMAccountName。
所以,我们改为CN,现在错误不同了:
TID: [0] [IS] [2016-04-18 10:30:46,338] DEBUG {org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager} - Searching for user A Student16 {org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager}
TID: [0] [IS] [2016-04-18 10:30:46,354] DEBUG {org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager} - Searching for user with SearchFilter: (&(objectClass=user)(cn=A Student16)) in SearchBase: {org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager}
TID: [0] [IS] [2016-04-18 10:30:46,354] DEBUG {org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager} - Name in space for A Student16 is CN=A Student16,OU=2016,OU=Students,OU=Accounts,DC=some,DC=org {org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager}
TID: [0] [IS] [2016-04-18 10:30:46,354] DEBUG {org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager} - User: A Student16 exist: true {org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager}
TID: [0] [IS] [2016-04-18 10:30:46,463] DEBUG {org.wso2.carbon.user.core.ldap.ActiveDirectoryUserStoreManager} - value after escaping special characters in A Student16 : A Student16 {org.wso2.carbon.user.core.ldap.ActiveDirectoryUserStoreManager}
TID: [0] [IS] [2016-04-18 10:30:46,463] DEBUG {org.wso2.carbon.user.core.ldap.ActiveDirectoryUserStoreManager} - Can not access the directory service for user : A Student16 {org.wso2.carbon.user.core.ldap.ActiveDirectoryUserStoreManager}
javax.naming.NameNotFoundException: [LDAP: error code 32 - 0000208D: NameErr: DSID-03100238, problem 2001 (NO_OBJECT), data 0, best match of:
'DC=some,DC=org'
]; remaining name 'CN=A Student16'
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3112)
答案 0 :(得分:1)
在<IS_HOME>repository/conf/log4j.properties
文件后面添加一行,然后尝试失败的方案。还附上wso2caron.log
文件以分析问题。
log4j.logger.org.wso2.carbon.user.core=DEBUG
还附加user-mgt.xml文件。
答案 1 :(得分:0)
我想我遇到了同样的问题。通过更改UserSearchBase,我能够让密码恢复为用户工作,因此它完全引用了用户的OU。
在我们的案例中,我们有以下用户:
OU=FacStaff,OU=People,DC=SomeCollege,DC=edu
OU=Students,OU=People,DC=SomeCollege,DC=edu
OU=Sysusers,OU=PrivUsers,DC=SomeCollege,DC=edu
通过指定完整OU,密码恢复适用于该OU中的用户,但任何其他OU中的用户甚至无法登录。
我希望将我的UserSearchBase设置为DC = SomeCollege,DC = edu,这样它就可以搜索我们的整个树,这可以用于身份验证,但不能用于写入Active Directory的任何内容。
我可以通过使用ldif执行ldapmodify来复制错误,该ddif为用户省略了部分DN,因此我怀疑问题在于updateCredentialByAdmin函数,因为它试图使用CN和UserSearchBase它应该在哪里使用完整的DN。
我也尝试过使用多个UserSearchBase条目,用哈希字符分隔它们。同样,它适用于身份验证,但不适用于更新。