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
以及参数code
和redirect_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令牌的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Java/Kotlin API 从 KeyCloak 请求 JWT 令牌
http://jwt.io 如何检索 keycloak 签名密钥?