KeyCloak 用户凭证加密

Posted

技术标签:

【中文标题】KeyCloak 用户凭证加密【英文标题】:KeyCloak User Credentials Encryption 【发布时间】:2019-12-31 10:13:11 【问题描述】:

我正在使用 KeyCloak 自动将包含的用户导入现有的 LDAP。现在,我需要知道 KeyCloak 如何与 LDAP 通信。具体来说,KeyCloak 如何将密码传递给 LDAP 以验证用户凭据。

我尝试在整个互联网上进行搜索,但找不到有关此内容的论坛、博客或文档。我需要这个来通过我们的安全要求。

【问题讨论】:

这取决于,如果你使用 ldaps 那么那应该是安全的 【参考方案1】:

这取决于使用的协议。

添加 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

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

关于密码,这似乎是 OP 的具体关注点,根据文档,密码按原样发送给提供者,如果使用ldaps,当然会通过加密的 TLS 隧道传输。

14.3.7.密码哈希

当用户的密码从 Keycloak 更新并发送到 LDAP 时, 它始终以纯文本形式发送。这不同于更新 内置 Keycloak 数据库的密码,当哈希和加盐时 在将密码发送到数据库之前将其应用于密码。如果是 LDAP,Keycloak 依赖 LDAP 服务器提供散列和 密码加盐。

大多数 LDAP 服务器(Microsoft Active Directory、RHDS、FreeIPA) 默认情况下提供。其他一些(OpenLDAP、ApacheDS)可能存储 默认情况下纯文本密码,您可能需要明确 为他们启用密码哈希。请参阅 LDAP 的文档 服务器更多细节。

【讨论】:

【参考方案2】:

Keycloak 通过(请鼓掌)LDAP 协议与符合 LDAP 的目录服务进行通信。 Keycloak docs 将 Active Directory 称为 LDAP 服务,但任何符合 LDAP 的服务器都可以工作。 LDAP 作为一种协议,允许以非加密模式以及通过 SSL(又名 LDAPS)的安全模式与服务器建立连接。 Keycloak supports LDAPS 除了普通的旧 LDAP:

14.3.4。通过 SSL 连接到 LDAP

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

以下是一些配置示例:onetwo

Keycloak 文档继续说,当密码在 Keycloak 中更新并推送回 LDAP 时,它是以明文形式完成的。这有点误导。如果您使用 LDAPS,密码在某些情况下确实以明文形式发送,但它作为传输层封装在 SSL 中。

【讨论】:

以上是关于KeyCloak 用户凭证加密的主要内容,如果未能解决你的问题,请参考以下文章

我应该使用哪个凭证来生成令牌,然后使用 Postman 在 Keycloak DB 中创建用户?

keycloak 中的“参数 client_assertion_type 丢失”

Keycloak:使用 keycloak-admin 为用户生成访问令牌

Keycloak 客户端与用户

Keycloak 8:已添加用户名为“admin”的用户

keycloak,用户注册。如何添加角色?