T A*_*T A 6 jwt openid-connect keycloak
我当前正在尝试使用 POST 请求(而不是使用指定的适配器之一)从 keycloak 令牌端点检索用户令牌。我已经设置了一个 keycloak 领域并添加了我自己的机器作为客户端。在文档中,令牌端点被描述为:
/realms/{realm-name}/protocol/openid-connect/token
Run Code Online (Sandbox Code Playgroud)
据我阅读的openid 规范,我需要设置 body 参数grant_type=authorization_code以及参数code和redirect_uri。我还需要设置Authorization标头,为此我需要一个基本令牌。
到目前为止我会得到回复:
“error”:“unauthorized_client”,
“error_description”:“INVALID_CREDENTIALS:无效的客户端凭据”
我从哪里获得基本Authorization令牌?我预计我需要提供用户名和密码,因为 JWT 令牌是我试图接收的响应。redirect_url如果我只想请求令牌,是否需要设置?
Keycloak 遵循 OpenId Connect 规范,提供了不止一种检索用户访问令牌的方法。这里有根据 openid connect 规范执行授权代码流(推荐用于 Web 应用程序的代码流)的步骤: https: //rograce.github.io/openid-connect-documentation/explore_auth_code_flow
\n\n基本上,如果您不使用任何适配器,当检测到对某些受保护资源的请求时,您应该:
\n\n执行到 keycloak 登录页面的重定向(请记住 keycloak 使用 REALM 实体,因此您也需要指定它):
\n\nHTTP/1.1 302 Found\n Location: https://mykeycloakinstance.org/auth/realms/demo/protocol/openid-connect/auth?\n response_type=code\n &scope=openid\n &client_id=s6BhdRkqt3\n &state=af0ifjsldkj\n &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb\nRun Code Online (Sandbox Code Playgroud)\n\n您需要将状态值保留在客户端中,因为它需要在重定向过程中继续存在:
\n\n\n\n\n建议 client\xe2\x80\x99s 使用此参数来维护请求和回调之间的状态。通常,跨站点请求伪造(CSRF、XSRF)缓解是通过将此参数的值与浏览器 cookie 进行加密绑定来完成的。
\n
您不与用户名/密码进行交互。keycloak 身份验证页面可以。登录成功后,它将使用有效代码重定向到您的页面:
\n\nHTTP/1.1 302 Found\nLocation: https://client.example.org/cb?\n code=SplxlOBeZQQYbYS6WxSbIA\n &state=af0ifjsldkj\nRun Code Online (Sandbox Code Playgroud)\n\n在这里,您需要检查状态是否是您最初发送的状态(您可能需要使用 cookie 通过网络会话跟踪它),并使用该代码获取令牌。您可以使用以下代码向授权端点执行 POST:
\n\nPOST /auth/realms/demo/protocol/openid-connect/auth HTTP/1.1\nHost: https://mykeycloakinstance.org\nContent-Type: application/x-www-form-urlencoded\nAuthorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW\n\ngrant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA\n &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb\nRun Code Online (Sandbox Code Playgroud)\n\n这是总结的流程,我自己还没有测试过代码,所以请使用它作为示例,如果您考虑,请毫不犹豫地修复它;-)
\n\n也可以看看:
\n\n\n| 归档时间: |
|
| 查看次数: |
9146 次 |
| 最近记录: |