Keycloak服务器身份验证

时间:2020-10-11 09:43:32

标签: keycloak

我正在创建Java应用程序,需要用户登录。现在,我正在验证是否可以足够安全地配置Keycloak。我想确保我的应用程序确实可以通过Keycloak服务器对用户进行身份验证-例如,我知道类似DNS Poisining或其他攻击,在这种情况下,我的应用程序可能会通过重复/攻击的Keycloak实例到达攻击者服务器。令我感到惊讶的是,我目前使用以下按键进行配置:

keycloak.auth-server-url=...
keycloak.realm=...
keycloak.resource=...
keycloak.public-client=true
keycloak.security-constraints[0].authRoles[0]=..
keycloak.security-constraints[0].securityCollections[0].patterns[0]=...
keycloak.principal-attribute=preferred_username

,不需要公钥。更糟糕的是:https://stackoverflow.com/a/40516696/520521我看到评论已被拒绝,我的应用程序可能会从(恶意)服务器下载密钥。

在开始对Keycloak服务器进行身份验证之前,我是否还需要执行其他步骤来进行身份验证?

2 个答案:

答案 0 :(得分:0)

根据您的配置,您似乎已将Keycloak中的客户端定义为公共客户端。这使您的客户端无需任何身份验证即可调用Keycloak。例如,当您要通过网页中的js进行身份验证时,会使用这种类型的客户端,在这种情况下,攻击者无法访问网页的源代码,因此无法隐藏任何内容。

如果将客户端的“访问类型”设置为“机密”(在Keycloak Admin UI的“客户端设置”中)并保存设置,则会出现另一个标题为“客户端”的“设置”标签旁边的标签”证书”。在那里,您可以看到为客户端创建的默认密码。然后,应在应用程序内的keycloak.json文件中将此秘密保存如下:

"credentials": {
    "secret": "paste-the-secret-value-here"
}

您还可以通过选择“重新生成机密”按钮来重新生成值。

您也可以在此处更改“客户端身份验证器”,并将其设置为“ X509证书”。然后,将要求您定义一个正则表达式以验证客户端将用于身份验证的证书的“主题DN”。与该正则表达式匹配的任何证书都将被视为有效和经过身份验证。然后,您必须将客户端设置为使用此类证书,而不是在keycloak.json文件中定义“秘密”值。

当然还有另一个使用“签名JWT”的选项,该选项也很安全,您可以在Client Authentication部分的Keycloak文档中找到有关如何设置它的详细信息。

答案 1 :(得分:0)

我看不出这是什么目的,但是看到公用密钥和专用密钥的位置,我知道答案是,在领域设置->密钥->活动中,有密钥列表。您可以使用右侧的按钮下载公共密钥或证书。就我的Spring引导而言,请在keycloak.realm-key下输入application.properties文件的公共密钥。