gpt4 book ai didi

jwt - Keycloak - 通过 OIDC 端点检索 JWT token

转载 作者:行者123 更新时间:2023-12-03 23:52:56 25 4
gpt4 key购买 nike

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

/realms/{realm-name}/protocol/openid-connect/token
据我阅读 openid specification , 我需要设置 body 参数 grant_type=authorization_code以及参数 coderedirect_uri .我还需要设置 Authorization header ,为此我需要一个基本 token 。
到目前为止,我会得到回应:

"error": "unauthorized_client",
"error_description":"INVALID_CREDENTIALS: Invalid client credentials"


我从哪里获得基本版 Authorization token 来自?我希望我需要提供用户名和密码,因为 JWT token 是我试图接收的响应。我需要设置 redirect_url吗?如果我只想请求 token ?

最佳答案

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

基本上,如果您没有使用任何适配器,则在检测对某些 protected 资源的请求时,您应该:

执行重定向到 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

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

It is recommended that client’s use this parameter to maintain state between the request and the callback. Typically, Cross-Site Request Forgery (CSRF, XSRF) mitigation is done by cryptographically binding the value of this parameter with a browser cookie.



您不与用户名/密码交互。 keycloak 身份验证页面可以。登录成功后,它将使用有效代码重定向到您的页面:
HTTP/1.1 302 Found
Location: https://client.example.org/cb?
code=SplxlOBeZQQYbYS6WxSbIA
&state=af0ifjsldkj

在这里,您需要检查状态是否是您最初发送的状态(您可能需要通过 Web session 跟踪它,使用 cookie)并使用该代码获取 token 。您使用以下代码对授权端点执行 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

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

另见:
  • What are Keycloak's OAuth2 / OpenID Connect endpoints?
  • 关于jwt - Keycloak - 通过 OIDC 端点检索 JWT token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54705603/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com