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



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

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

据我在OpenID规范中阅读,我将需要设置Body参数grant_type=authorization_code以及参数coderedirect_uri。我还需要设置Authorization标头,为此我需要一个基本的令牌。

到目前为止,我将得到答复:

"错误":'unuterorized_client;&quot" invalid_credentials:无效的客户凭据"

从哪里获得基本的Authorization令牌?我希望我需要提供一个用户名和密码,因为JWT令牌是我试图作为响应收到的内容。如果我只想请求令牌,我需要设置redirect_url吗?

按照OpenID Connect Spec,KeyCloak提供了多种检索用户访问令牌的方法。在这里,您可以根据OpenID Connect Spec:https://rograce.github.io/openid-connect-documentation/explore_auth_code_code_code_flow ,在这里,您可以采取步骤来进行授权代码流(推荐用于Web应用程序)。

基本上,如果您不使用任何适配器,则在检测到某些受保护资源的请求时:

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

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 /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的OAuth2/OpenID连接端点?

最新更新