如果用户的access_token
过期并且用户想要保持登录状态,我需要让用户继续在系统中保持登录状态。如何使用Keycloak的refresh_token
获取最新的access_token
?
我正在使用vert.x上的vertx-auth进行身份验证实现,结合Keycloak。是否可以使用vertx-auth或Keycloak的REST API刷新access_token
?否则还有其他的实现方法吗?
如果用户的access_token
过期并且用户想要保持登录状态,我需要让用户继续在系统中保持登录状态。如何使用Keycloak的refresh_token
获取最新的access_token
?
我正在使用vert.x上的vertx-auth进行身份验证实现,结合Keycloak。是否可以使用vertx-auth或Keycloak的REST API刷新access_token
?否则还有其他的实现方法吗?
Keycloak具有REST API,可使用refresh_token
创建access_token
。这是一个POST端点,使用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。
@maslick 是正确的,您需要提供客户端密钥,此时无需授权标头:
http://localhost:8080/auth/realms/{realm}/protocol/openid-connect/token
如果刷新令牌已过期,则返回如下内容:
如果不添加密钥,则会收到“401 未经授权”的响应,即使刷新令牌是正确的。
client_id
和client_secret
也可以在授权头中发送。Authorization: Basic ${Base64(<client_id>:<client_secret>)}
/openid-connect/token
端点的刷新令牌调用。
我尝试使用4.8.2.Final版本,即使使用先前的访问令牌作为“Bearer”,它也会给出以下“unauthorized_client”的提示。 然后我在授权标头中使用了“Basic YXBwLXByb3h5OnNlY3JldA==”。 然后它起作用了,但我仍然不确定我是否做对了。
2.5.4
版本,但对于此请求仍然需要提供客户端密钥,虽然现在我明白为什么会要求提供客户端密钥,如果提供了刷新令牌的话。 - rrrocky