使用 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 保护的 web 应用程序中获取登录用户名
如何使用 httppost/rest-api 从 keycloak 获取用户列表