密钥斗篷服务器身份验证



我正在创建Java应用程序,需要用户登录。目前我正在验证我是否可以足够安全地配置Keycapture。我想确保我的应用程序真的在针对我的Key斗篷服务器对用户进行身份验证——例如,我知道存在类似DNS Poisining或其他攻击的情况,我的应用软件可能会通过重复的/攻击者的Key斗篷实例到达攻击者服务器。令我惊讶的是,我目前配置了以下密钥:

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我看到投票支持的评论告诉我,我的应用程序可能会从(恶意(服务器下载密钥。

在开始对用户进行身份验证之前,我是否需要遵循任何额外的步骤来验证Key斗篷服务器?

根据您的配置,您似乎已经将Keycloft中的客户端定义为public。这使您的客户端能够在不进行任何身份验证的情况下调用Keycloft。例如,当您要通过网页中的js进行身份验证时,就会使用这种类型的客户端,因为攻击者可以访问网页的源,所以无法对其隐藏任何内容。

如果设置";访问类型";您的客户的";"机密";(在Key斗篷管理UI上的客户端设置中(并保存设置时,将出现另一个名为"设置"的选项卡(在客户端的"设置"选项卡旁边(;凭证";。在那里,您可以看到为您的客户端创建的默认机密。然后,您应该将这个秘密放在应用程序中的keycloak.json文件中,如下所示:

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

您也可以通过选择";再生秘密";按钮

您也可以更改";客户端验证器";并将其设置为"0";X509证书";。然后你将被要求定义一个正则表达式来验证";受试者DN";客户端将用于身份验证的证书的。任何与该正则表达式匹配的证书都将被视为有效并经过身份验证。然后你必须设置你的客户端使用这样的证书,而不是定义";秘密";keycloak.json文件中的值。

当然还有另一种选择;签名JWT";它也是安全的,您可以在客户端身份验证部分的Keycloft文档中找到有关如何设置它的详细信息。

我看不出这是目的,但看到公钥和私钥的位置,我明白答案是,在领域设置中->按键->激活时有一个密钥列表。您可以通过右侧的按钮下载公钥或证书。在我的Spring引导案例中,在keycapture.realm-key.下输入application.properties文件一个公钥

相关内容

最新更新