通过Keycloak中的refresh_token刷新access_token

Rai*_*nod 6 java oauth-2.0 vert.x keycloak

如果用户的access_token过期并且用户想要继续登录,我需要让用户继续登录系统.如何在Keycloak上使用refresh_token获取新更新的access_token ?

我使用vertx-AUTH与在auth实施Keycloakvert.x.是否可以使用vertx-authKeycloak的REST API本身刷新access_token ?或者这将是另一种实现方式?

Yog*_*hra 26

keycloak具有用于创建access_token使用的REST API refresh_token.它是一个POST endpoint with application/x-www-form-urlencoded

以下是它的外观:

Method: POST URL: https://keycloak.example.com/auth/realms/myrealm/protocol/openid-connect/token Body type: x-www-form-urlencoded Form fields:
client_id : <my-client-name> grant_type : refresh_token refresh_token: <my-refresh-token>

这将使用刷新令牌为您提供新的访问令牌.

注意:如果刷新令牌已过期,则会抛出400异常,因为您可以再次登录用户.

查看Postman中的示例,您可以使用此开发和相应的API.

Postman中的样本

  • 仅当它是*机密* 客户端时才需要客户端机密。*公共*客户端不需要客户端机密。 (8认同)
  • 我用 `2.5.4` 尝试了这个,它仍然需要这个请求的客户端密码。但是,如果提供刷新令牌,为什么需要客户端机密,现在是有意义的。 (4认同)
  • 有人可以解释为什么刷新机密客户端的令牌时需要客户端密码吗? (3认同)

小智 8

@ maslick是正确的,您也必须提供客户端密钥,在这种情况下不需要授权标头:

http://localhost:8080/auth/realms/{realm}/protocol/openid-connect/token

在此输入图像描述

如果刷新令牌过期,它将返回:

在此输入图像描述

如果您不添加密钥,即使刷新令牌正确,您也会收到 401 未经授权的错误

在此输入图像描述

  • 我刚刚测试过,如果发出令牌的客户端**是机密的,则只需要客户端密钥 (4认同)