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

问题描述 投票:0回答:1

我目前正在尝试使用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

jwt keycloak oidc
1个回答
1
投票

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

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

也可以看看:

© www.soinside.com 2019 - 2024. All rights reserved.