Keycloak - 通过OIDC端点检索JWT令牌

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Keycloak - 通过OIDC端点检索JWT令牌相关的知识,希望对你有一定的参考价值。

我目前正在尝试使用POST请求从keycloak令牌端点检索用户令牌(而不是使用其中一个指定的适配器)。我已经建立了一个keycloak领域,并添加了我自己的mashine作为客户端。在文档中,令牌端点被描述为:

/realms/{realm-name}/protocol/openid-connect/token

据我所知,在openid specification中,我需要设置body参数grant_type=authorization_code以及参数coderedirect_uri。我还需要设置Authorization标头,我需要一个基本标记。

到目前为止,我将得到回应:

“错误”:“unauthorized_client”, “error_description”:“INVALID_CREDENTIALS:无效的客户端凭据”

我从哪里获得Basic Authorization Token?我希望我需要提供用户名和密码,因为JWT令牌是我试图收到的响应。如果我只想申请令牌,是否需要设置redirect_url

答案

Keycloak提供了多种方法来检索用户访问令牌,遵循OpenId Connect规范。在这里,您可以根据openid连接规范为授权代码流(推荐用于Web应用程序)执行此操作:https://rograce.github.io/openid-connect-documentation/explore_auth_code_flow

基本上,如果您没有使用任何适配器,当检测到对某些受保护资源的请求时,您应该:

执行重定向到keycloak登录页面(请记住,keycloak使用REALM实体,因此您还需要指定它):

HTTP/1.1 302 Found
  Location: https://mykeycloakinstance.org/auth/realms/demo/protocol/openid-connect/auth?
    response_type=code
    &scope=openid
    &client_id=s6BhdRkqt3
    &state=af0ifjsldkj
    &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb

您需要将状态值保留在客户端中,因为它需要在重定向过程中继续存在:

建议客户端使用此参数来维护请求和回调之间的状态。通常,跨站请求伪造(CSRF,XSRF)缓解是通过将此参数的值与浏览器cookie加密绑定来完成的。

您不与用户名/密码进行交互。 keycloak身份验证页面可以。登录成功后,它将使用有效代码重定向到您的页面:

HTTP/1.1 302 Found
Location: https://client.example.org/cb?
  code=SplxlOBeZQQYbYS6WxSbIA
  &state=af0ifjsldkj

在这里,您需要检查状态是否是您最初发送的状态(您可能需要通过Web会话,使用Cookie跟踪它),还要使用该代码获取令牌。您使用以下代码对授权端点执行POST:

POST /auth/realms/demo/protocol/openid-connect/auth HTTP/1.1
Host: https://mykeycloakinstance.org
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW

grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
  &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb

这是总结的流程,我自己没有测试过代码,所以以它为例,如果你考虑的话,不要犹豫,修改它;-)

也可以看看:

以上是关于Keycloak - 通过OIDC端点检索JWT令牌的主要内容,如果未能解决你的问题,请参考以下文章

Quarkus 验证来自多个来源的 JWT

如何通过 Java/Kotlin API 从 KeyCloak 请求 JWT 令牌

http://jwt.io 如何检索 keycloak 签名密钥?

Net CORE Keycloak 和 OIDC

如何使用 openid connect OIDC 加密 REST 正文

Keycloak:访问令牌验证端点