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

时间:2019-02-15 08:54:34

标签: jwt keycloak oidc

我目前正在尝试使用POST请求(而不是使用指定的适配器之一)从密钥斗篷令牌端点检索用户令牌。我已经建立了一个密钥斗篷域,并添加了自己的mashine作为客户端。在文档中,令牌端点描述为:

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

据我所读的openid specification,我将需要设置主体参数grant_type=authorization_code以及参数coderedirect_uri。我还需要设置Authorization标头,为此我需要一个基本令牌。

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

  

“错误”:“ unauthorized_client”,
“错误描述”:   “ INVALID_CREDENTIALS:无效的客户端凭据”

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

1 个答案:

答案 0 :(得分:1)

根据OpenId Connect规范,Keycloak提供了多种方法来检索用户访问令牌。根据openid connect规范,这里有步骤针对授权代码流(对于Web应用程序建议一种方法)执行此操作:https://rograce.github.io/openid-connect-documentation/explore_auth_code_flow

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

执行到密钥库登录页面的重定向(请注意,密钥库使用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

在这里,您需要检查状态是否是您最初发送的状态(您可能需要通过网络会话使用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

这是总结的流程,我没有亲自测试过代码,因此以它为例,如果您考虑;-)

,请毫不犹豫地对其进行修复。

另请参见:

相关问题