如果用户的access_token过期并且用户想要保留登录名,则需要使用户保留在系统中的登录名。如何在Keycloak上使用refresh_token获得新近更新的access_token?
我将vertx-auth上的Keycloak用于auth实现。是否可以使用vert.x或vertx-auth的REST API本身刷新access_token?抑或是另一种实现方式?
答案 0 :(得分:14)
keycloak具有用于使用access_token
创建refresh_token
的REST API。这是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。
答案 1 :(得分:0)
我尝试使用4.8.2.Final,即使先前的访问令牌为“ Bearer”,它也会给出unauthorized_client
之后的内容。
然后,我尝试使用Authorization标头中的Basic YXBwLXByb3h5OnNlY3JldA==
。
然后它起作用了,但是我仍然不确定我在做正确的事情。
答案 2 :(得分:0)
@maslick 是正确的,您也必须提供客户端密钥,在这种情况下不需要授权标头:
http://localhost:8080/auth/realms/{realm}/protocol/openid-connect/token
如果刷新令牌过期,则返回:
如果您不添加密钥,即使刷新令牌正确,也会得到 401 未授权