繁体   English   中英

启用 LDAP 的 Keycloak 电子邮件“UPDATE_PASSWORD”机制(15.0.2)

[英]Keycloak email "UPDATE_PASSWORD" mechanism with LDAP enabled(15.0.2)

我有一个使用它进行身份验证的 keycloak-server 和服务。 我想允许用户更改他们的密码。 但是文档中不清楚电子邮件操作“更新密码”如何在启用 LDAP 的情况下工作。 https://www.keycloak.org/docs/latest/server_admin/#_user-storage-federation

“默认情况下,Keycloak 会将用户从 LDAP 导入本地 Keycloak 用户数据库。该用户副本要么按需同步,要么通过定期后台任务进行同步。唯一的例外是密码同步。密码永远不会导入. 他们的验证总是委托给 LDAP 服务器“

并在“编辑模式”部分

“可写的用户名、电子邮件、名字、姓氏和其他映射属性和密码都可以更新,并将自动与您的 LDAP 存储同步。”

我在“用户联合”选项卡中的设置 -> LDAP 是:

"Import Users": "ON",
"Edit Mode": "None"

Sync Settings
"Periodic Full Sync": "Off",
"Peroidic Changed Users Sync": "On"

In the Section "Mappers"
"password" param is not listed.

那么,如果我们应用到用户电子邮件操作“UPDATE_PASSWORD”并且用户将设置新密码,结果将被持久化到 Keycloak 和 openldap 之后是否正确? 但只有当 ldap 上的“编辑模式”将被设置为“WRITABLE”时 现在,如果没有这种模式,我将在 keycloak 中更改密码,由于与 ldap 不一致,数据将被损坏。 另外,我没有创建这个 keycloak-server,在 LDAP 上将编辑模式设置为“WRITABLE”被认为是一种不好的做法/漏洞? 在这种情况下,解决方法是将密码直接写入 openldap?

现在我以这种方式更新了密码,但是在没有启用 ldap 的情况下对其进行了测试

 public void updatePassword(String id){
            UserResource userResource = keycloak.realm(keycloakProperties.getRealm())
                    .users().get(id);
            userResource.executeActionsEmail(List.of("UPDATE_PASSWORD"));
        }

服务使用具有“ keycloak-admin-client ”依赖项的Spring (v. 15.0.2 )

结果证明就像文档说的一样简单。 如果 LDAP 上的“编辑模式”设置为WRITABLE ,新密码将自动与您的 LDAP 存储同步。 我决定直接在 openldap 中更新“userPassword”,并且没有读取和写入用户数据的 keycloak 实例。 同样在我的情况下,更新后的密码格式是“纯文本”。 使用本指南中的证书启用编码https://github.com/osixia/docker-openldap/issues/208

政策文件

dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: ppolicy 

覆盖.ldif

dn: olcOverlay={2}ppolicy,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcPPolicyConfig
olcOverlay: {2}ppolicy
olcPPolicyHashCleartext: TRUE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM