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 中验证令牌并获取用户详细信息?

使用 keycloak 将自定义键/值添加到 JWT 令牌有效负载或用户

Keycloak:使用 keycloak-admin 为用户生成访问令牌

将Springboot webapp部署到Docker时Keycloak适配器无法验证令牌

春季无法获取keycloak授权令牌

Keycloak 访问令牌与 UserInfo 令牌?