使用Active Directory配置WSO2 Identity Server?

时间:2016-04-16 00:39:52

标签: wso2 wso2is federated-identity

我正在尝试使用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)

2 个答案:

答案 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条目,用哈希字符分隔它们。同样,它适用于身份验证,但不适用于更新。