2016-11-09 37 views
6

,当我访问keycloak管理控制台,创建客户(远程!):Keycloak:缺少境界公钥

keycloak client settings

的keycloak OIDC JSON没有公钥

keycloak OIDC JSON

我期望在JSON里有这样的东西:

"realm-public-key": "MIIBIjANBg.... 

回答

15

keycloak.json在最新的keycloak没有任何领域的公共密钥......实际上,它似乎是你使用keycloak版本2.3.x有一些变化。基本上你可以旋转一个领域的多个公钥。该文件说: -

在2.3.0版本中,我们添加了对公钥旋转的支持。当管理员 在Keycloak管理控制台中旋转领域密钥时,客户端适配器 将能够识别它并自动从Keycloak下载新公钥 。但是,只要您的适配器中没有领域公开密钥选项, 硬编码公钥就可以自动下载新密钥 。出于这个原因,我们不建议在适配器配置中使用 realm-public-key选项。请注意, 选项仍然受支持,但它可能很有用,只要您真的 想要在您的适配器配置中使用硬编码公钥,并且 绝不会从Keycloak下载公钥。理论上,如果你在适配器和Keycloak之间有不可信的 网络,这可以避免中间人攻击,但是在这种情况下,更好的选择是使用HTTPS,这将保护所有人 适配器和Keycloak之间的请求。

+1

是否有文档可以使用公钥? – ibotty

+0

@ibotty我还没有遇到任何这样的直接文档,但您可以更改密钥的优先级。具有最高优先级的密钥得到了使用 – UchihaItachi

+0

仅仅为一年前寻找我问题答案的人提供了一个注释:您可以在'/protocol/openid-connect/certs'上获得与GET一起使用的证书。 – ibotty

4

我仍然不知道为什么会出现在keycloak OIDC JSON(可能是从安全原因)不公钥,但我已经下找到它:

领域设置>键>公共密钥视图

enter image description here

+0

*我仍然不知道为什么在keycloak中没有公共密钥OIDC JSON *这是因为密钥旋转。如果适配器直接从服务器直接下载密钥,而不是在JSON中对密钥进行硬编码,则更加灵活。这样你可以旋转这些键;每个月或更新换新的。 –