使用来自 ldap 的 sAMAcountName 作为用户名

Use sAMAcountName from ldap as username

我将我们的活动目录连接到 keycloak (4.0.0.Beta1) 并导入了用户 - 这工作正常。

但用户名要从sAMAccountName填写。所以我将 Username LDAP attribute 更改为那个。

但是在单击 Synchronize all users 之后,我在控制台中收到此错误 window:

8:20:13,372 ERROR [org.keycloak.storage.ldap.LDAPStorageProviderFactory] (default task-119) Failed during import user from LDAP: org.keycloak.models.ModelException: User returned from LDAP has null username! Check configuration of your LDA
 mappings. Mapped username LDAP attribute: cn, user DN: CN=Mustermann Max,OU=Normung,OU=Mech,OU=Konstruktion,OU=Abteilungen,DC=company,DC=org, attributes from LDAP: {whenChanged=[2017037125253.0Z], whenCreated=[20140520092805.0
], mail=[Max.Mustermann@company.org], givenName=[Max], sn=[Mustermann], userAccountControl=[66048], pwdLastSet=[130750516258418527]}
       at org.keycloak.storage.ldap.LDAPUtils.getUsername(LDAPUtils.java:113)
       at org.keycloak.storage.ldap.LDAPStorageProviderFactory.run(LDAPStorageProviderFactory.java:521)
       at org.keycloak.models.utils.KeycloakModelUtils.runJobInTransaction(KeycloakModelUtils.java:227)
       at org.keycloak.storage.ldap.LDAPStorageProviderFactory.importLdapUsers(LDAPStorageProviderFactory.java:514)
       at org.keycloak.storage.ldap.LDAPStorageProviderFactory.syncImpl(LDAPStorageProviderFactory.java:469)
       at org.keycloak.storage.ldap.LDAPStorageProviderFactory.sync(LDAPStorageProviderFactory.java:407)
...

我尝试了一些映射器(尤其是 username)但没有成功。似乎只有少数属性从 ldap 服务器读取(请参阅输出中的 attributes from LDAP:...)。

即:whenChanged、whenCreated、mail、givenName、sn、userAccountControl、pwdLastSet。

如何获取 sAMAcountName 属性作为用户名?

我刚刚在 4.1.0.Final 中对其进行了测试,当您将 Username LDAP 属性 更改为 sAMAccountName[=21= 时它可以正常工作] 另外 LDAP Attributeusername 映射器中也映射到 sAMAccountName.

I tried some mappers (especially username) but with no luck.

你的问题表明你已经尝试在用户名映射器中做一些事情。所以你绝对是在正确的轨道上。要么是你的版本有问题,要么是两个字段没有正确匹配。

对我来说,它奏效了。请找到以下流程:

1) 在 User Federation -> LDAP Provider -> 中有一个名为 "UserName LDAP Attribute" 的设置。 (如图ldap provider settings)

2) Select 映射器选项卡并编辑 "username" 映射器并更改为以下设置:username mapper settings