KeyCloak用户凭据加密

5
我正在使用KeyCloak自动导入现有LDAP中包含的用户。现在,我需要知道KeyCloak如何与LDAP通信。具体来说,KeyCloak如何将密码传递给LDAP以验证用户凭据。
我尝试在互联网上搜索,但是我找不到关于此的论坛、博客或文档。我需要这个来满足我们的安全要求。

这取决于您是否使用ldaps,如果是,则应该是安全的。 - ravthiru
3个回答

7
这取决于所使用的协议。
在添加LDAP用户联合时,可以同时使用ldapldaps协议。
当将Connection URL设置为ldap://ldapserver.domain.com时, 使用ldap协议,Keycloak通过端口389(默认情况下)与服务器通信,这意味着从LDAP服务器检索的所有数据都是明文,包括每次进行身份验证请求时的密码。
另一方面,将Connection URL设置为ldaps://ldapserver.domain.com,将使用LDAP over SSL/TLS(不要与LDAP+STARTTLS混淆,它是加密LDAP通信的另一种方式),并且Keycloak通过默认端口636与服务器通信。这意味着Keycloak和LDAP服务器之间的所有通信都通过加密的SSL/TLS隧道进行,类似于浏览器和HTTPS网站之间的通信。
引用:

14.3.4. 连接到SSL上的LDAP

当您配置安全连接URL到您的LDAP存储(例如ldaps://myhost.com:636),Keycloak将使用SSL与LDAP服务器进行通信。...

关于密码,这似乎是OP特别关注的问题,根据文档,密码按原样发送给提供者,如果使用ldaps,则通过加密的TLS隧道传输。 14.3.7. 密码哈希 当用户的密码从Keycloak更新并发送到LDAP时,它总是以明文形式发送的。这与将密码更新到内置的Keycloak数据库时不同,在该情况下,哈希和盐被应用于密码,然后才发送到DB。在LDAP的情况下,Keycloak依赖LDAP服务器提供密码的哈希和盐。
大多数LDAP服务器(Microsoft Active Directory,RHDS,FreeIPA)默认提供此功能。其他一些服务器(OpenLDAP,ApacheDS)可能默认以明文存储密码,您可能需要显式启用密码哈希。有关更多详细信息,请参阅LDAP服务器的文档。

5
Keycloak通过LDAP协议与符合LDAP标准的目录服务进行通信。Keycloak文档谈到了将Active Directory作为LDAP服务,但任何符合LDAP标准的服务器都可以使用。LDAP作为协议允许在未加密模式和安全模式(即LDAPS)下与服务器建立连接。除了普通的LDAP,Keycloak还支持LDAPS:

14.3.4. 通过SSL连接到LDAP

当您配置一个已保护的连接URL连接到LDAP存储(例如 ldaps://myhost.com:636),Keycloak将使用SSL与LDAP服务器进行通信。

这里有一些配置示例:one two 当在Keycloak中更新密码并将其推回LDAP时,Keycloak文档继续说明该过程是以明文形式进行的。这有点误导人。如果您使用LDAPS,则在某些情况下确实会将密码作为明文发送,但它会被SSL作为传输层包装。

1
当我使用Keycloak与OpenLDAP时,发现密码以明文形式存储在LDAP服务器上,这让我非常担心。
经过长时间的探索,我发现只有在客户端(Keycloak)不支持“LDAPv3密码修改扩展操作”时,才需要强制OpenLDAP对接收到的密码进行哈希处理。
如果您希望将密码以哈希形式存储在LDAP服务器上,则应在Keycloak中配置LDAP连接的高级设置中启用“LDAPv3密码修改扩展操作”。

你的回答帮助我解决了我对于OpenLDAP存储明文密码的疑虑。 - hirikarate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接