使用 Keycloak 获取 id_token

Posted

技术标签:

【中文标题】使用 Keycloak 获取 id_token【英文标题】:Obtain id_token with Keycloak 【发布时间】:2018-08-25 14:52:15 【问题描述】:

谁知道如何用Keycloak获取id_token?

我一直在与Java(Spring,JEE)中的Keycloak 和邮递员合作。

基本工作正常,但我需要id_token,因为有人声称它们不存在于access_token,但它们存在于id_token

使用keycloak-core 库我可以获得 Keycloak 上下文,但 id_token 属性始终为空。

有什么想法吗?

【问题讨论】:

I have been working with Keycloak in Java (Spring, JEE) and postman. @Pablo 您使用的是哪个 Keycloak 适配器?您是否查看过有关 Security Context 的官方文档? 您好,感谢您的评论,我尝试使用 Spring Adapter、Wildfly Adapter,并尝试通过 http 调用获取 id_token,我查看了官方文档但我找不到任何关于 id_token 或如何配置以在/token 响应中获取它。 我猜这里的 access token 和 id token 是等价的。如果您愿意,您仍然可以添加自定义声明:***.com/questions/32678883/… 不是真的,access token 和 id_token 不可能有相同的信息,有时id_token 是用来处理敏感信息的,这就是我现在的要求。 【参考方案1】:

如果您使用的是 keycloak 3.2.1 版, 那么下面的邮件链会帮助你。 大家好

我正在使用以下 curl 命令

curl -k  https://IP-ADDRESS:8443/auth/realms/Test123/protocol/openid-connect/token -d "grant_type=client_credentials" -d "client_id=SURE_APP" -d "client_secret=ca3c4212-f3e8-43a4-aa14-1011c7601c67"

在上述命令的响应中,id_token 缺失,需要 kong 告诉我是谁?

在我的钥匙斗篷里realm->client-> Full Scope Allowed ->True

好的,我找到了,我们必须添加

scope=openid

那么只有它会起作用

【讨论】:

谢谢,您的回答对我帮助很大,我刚刚添加了 1 个想法 realm->client->Service Accounts Enabled ->True。有了这个我可以在令牌端点中获得id_token【参考方案2】:

在 keycloak 2.x 中,id_token 位于返回的令牌对象中。 他们在 keycloak 3.x 中删除了它。 只需在您的请求中添加以下内容:

scope: "openid"

如下所示保留id_token

http://lists.jboss.org/pipermail/keycloak-user/2018-February/013170.html

【讨论】:

【参考方案3】:

我对 Keycloak 3.4.3 版本有同样的看法。

正如 Gal Margalit 在他的回答中提到的那样,我在我的请求中添加了 scope=openid 并且它有效。

这是我的要求:

curl -X POST -H "Content-Type:application/x-www-form-urlencoded" -d "scope=openid" -d "grant_type=password" -d "client_id=test" -d "username=test@test.hr" -d "password=test" 'https://YOUR-DOMAIN/realms/test123/protocol/openid-connect/token'

【讨论】:

以上是关于使用 Keycloak 获取 id_token的主要内容,如果未能解决你的问题,请参考以下文章

使用 keycloak 在 servlet 应用程序中获取用户角色

Keycloak:使用新创建的客户端和用户获取 JWT

在使用 Keycloak 保护的 web 应用程序中获取登录用户名

如何使用 httppost/rest-api 从 keycloak 获取用户列表

如何使用 Rest Assured 从 KeyCloak 服务获取承载令牌

如何使用 Keycloak 在 Spring Boot 中获取当前登录用户?