我正在评估KeyCloak,并尝试将其配置为SalesForce客户端的SAML IDP。 SAML流程运行正常,但是新用户注册遇到了问题。 KeyCloak由用户联合LDAP(AD LDS)支持。 我有一个自定义字段映射到LDAP中的cn字段,并在我的自定义主题中更新了register.ftl。我还添加了一个映射器,该映射器将此自定义字段映射到LDAP属性。
当我尝试注册用户时出现错误,并且自定义属性的值似乎未正确获取。 当我在网上搜索时找不到任何有用的信息,这使我认为在我未发现的地方可能存在一个愚蠢的错误。
映射:
联盟提供商设置:
模板:
<div class="${properties.kcFormGroupClass!} ${messagesPerField.printIfExists('mrn',properties.kcFormGroupErrorClass!)}">
<div class="${properties.kcLabelWrapperClass!}">
<label for="mrn" class="${properties.kcLabelClass!}">MRN</label>
</div>
<div class="${properties.kcInputWrapperClass!}">
<input type="text" id="user.attributes.mrn" class="${properties.kcInputClass!}" name="user.attributes.mrn" value="${(register.formData['user.attributes.mrn']!'')}" />
</div>
</div>
这是我尝试注册新用户时遇到的错误(我在MRN字段中输入了123456):
14:08:43,514 WARN [org.keycloak.services] (default task-1) KC-SERVICES0013: Failed authentication: org.keycloak.models.ModelException: Could not retrieve identifier for entry [cn=\ ,OU=Emp,DC=MyPortal,DC=TEST,DC=COM].
at org.keycloak.storage.ldap.idm.store.ldap.LDAPIdentityStore.getEntryIdentifier(LDAPIdentityStore.java:546)
at org.keycloak.storage.ldap.idm.store.ldap.LDAPIdentityStore.add(LDAPIdentityStore.java:99)
at org.keycloak.storage.ldap.LDAPUtils.addUserToLDAP(LDAPUtils.java:78)
答案 0 :(得分:0)
我不确定该如何解决,但是我删除了我的映射器并重新创建了它,现在它可以正常工作了。我可以看到的唯一区别是,新的映射器的名称为小写,而旧的映射器的名称全部为大写。我不明白为什么这很重要。