Keycloak 无法使用有效令牌验证用户信息
Posted
技术标签:
【中文标题】Keycloak 无法使用有效令牌验证用户信息【英文标题】:Keycloak cannot verify user information with a valid token 【发布时间】:2021-05-02 07:19:26 【问题描述】:我正在将 Keycloak 设置为身份验证服务器 https://github.com/keycloak/keycloak/releases/download/12.0.0/keycloak-12.0.0.zip
Java 11
文档:https://github.com/keycloak/keycloak-documentation/blob/master/securing_apps/topics/oidc/oidc-generic.adoc
我可以通过/realms/realm-name/protocol/openid-connect/token
生成access_token
但我无法使用从第一个 API 获得的有效 access_token 调用 userinfo 端点 /realms/realm-name/protocol/openid-connect/userinfo
。
发布http://127.0.0.1:8080/auth/realms/test/protocol/openid-connect/token
client_secret: ...,
grant_type: ...,
client_id: ...,
回复
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIxOE..."
"expires_in": 3600,
"refresh_expires_in": 0,
"token_type": "Bearer",
"not-before-policy": 0,
"scope": "create"
但这是我调用获取用户信息 API 时的结果
获取http://127.0.0.1:8080/auth/realms/test/protocol/openid-connect/userinfo 标头:承载 $access_token
有什么建议吗?
谢谢
后人测试
Keycloak 服务器的日志是一样的
Keycloak 错误 我认为这是 KC 12.0 的问题 当我使用 KC 11.0.3 时,上述 API 工作正常 https://github.com/keycloak/keycloak-community/issues/224
Jira 故事:
https://issues.redhat.com/browse/KEYCLOAK-17217
【问题讨论】:
是的,这是在 12.0.0 中添加的回归,我也用不同的版本进行了测试,只有 12.0.x 失败 【参考方案1】:确保您按如下方式调用端点。
首先获得令牌:
curl -d "client_id=$YOUR_CLIENT_ID" \
-d "client_secret=$YOUR_CLIENT_SECRET" \
-d "grant_type=client_credentials" \
http://127.0.0.1:8080/auth/realms/test/protocol/openid-connect/token)
从 JSON 响应中提取 access_token
字段(例如 jq -r .access_token
)
然后调用userinfo如下:
curl -X GET http://127.0.0.1:8080/auth/realms/test/protocol/openid-connect/userinfo \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN"
与邮递员:
对于 Realm Name = "test"、client_id = "test"、client_secret = "63b61af0-5a99-41d7-8f9b-4e3059b8b9ab" 并使用 client_credentials grant_type
的设置。
获取令牌:
并获取用户信息:
编辑
以下方法适用于 Keycloak 10.0.x 和 11.0.x,但与 OP 的 Keycloak 12.0.x 版本(包括最新版本的 Keycloak 12.0.2)完全相同。
此接缝将通过 Keycloak 12.0.0 添加回归,关注 this issue 以获取更新信息。
【讨论】:
显然这个问题已经结束,有利于这个问题。 issues.redhat.com/browse/KEYCLOAK-17217 @Martin01478 感谢您的评论,发生的情况是发布问题的线程不是最好的线程,因此它们作为 jira 故事移动。我会实际更新答案以上是关于Keycloak 无法使用有效令牌验证用户信息的主要内容,如果未能解决你的问题,请参考以下文章
使用 keycloak 将自定义键/值添加到 JWT 令牌有效负载或用户
Keycloak:使用 keycloak-admin 为用户生成访问令牌