在 Keycloak 中通过 refresh_token 刷新 access_token
Refresh access_token via refresh_token in Keycloak
如果用户的 access_token
过期并且用户想保持登录状态,我需要让用户在系统中保持登录状态。如何通过在 Keycloak 上使用 refresh_token
来更新 access_token
?
我正在使用 vertx-auth 在 vert.x 上使用 Keycloak 进行身份验证实施。是否可以使用 vertx-auth 或 Keycloak 的 REST API 本身刷新 access_token
?或者这个的另一种实现方式是什么?
keycloak 具有 REST API,用于使用 refresh_token
创建 access_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。
我尝试使用 4.8.2.Final,它给出以下 unauthorized_client
,即使之前的访问令牌为 'Bearer'。
然后我在授权 header 中尝试使用 Basic YXBwLXByb3h5OnNlY3JldA==
。
然后它起作用了,但我仍然不确定我做的是对的。
@maslick 是正确的,您也必须提供客户端密码,在这种情况下不需要授权 header:
http://localhost:8080/auth/realms/{realm}/protocol/openid-connect/token
如果刷新令牌过期 returns:
如果您不添加密码,即使刷新令牌正确,也会收到 401 未经授权
扩展 Yogendra Mishra 的回答。注意
client_id
和client_secret
也可以在授权header中发送。
Authorization: Basic ${Base64(<client_id>:<client_secret>)}
这适用于初始令牌调用(没有刷新令牌)和对 /openid-connect/token
端点
的刷新令牌调用
参考:
https://developer.okta.com/docs/reference/api/oidc/#client-secret
如果用户的 access_token
过期并且用户想保持登录状态,我需要让用户在系统中保持登录状态。如何通过在 Keycloak 上使用 refresh_token
来更新 access_token
?
我正在使用 vertx-auth 在 vert.x 上使用 Keycloak 进行身份验证实施。是否可以使用 vertx-auth 或 Keycloak 的 REST API 本身刷新 access_token
?或者这个的另一种实现方式是什么?
keycloak 具有 REST API,用于使用 refresh_token
创建 access_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。
我尝试使用 4.8.2.Final,它给出以下 unauthorized_client
,即使之前的访问令牌为 'Bearer'。
然后我在授权 header 中尝试使用 Basic YXBwLXByb3h5OnNlY3JldA==
。
然后它起作用了,但我仍然不确定我做的是对的。
@maslick 是正确的,您也必须提供客户端密码,在这种情况下不需要授权 header:
http://localhost:8080/auth/realms/{realm}/protocol/openid-connect/token
如果刷新令牌过期 returns:
如果您不添加密码,即使刷新令牌正确,也会收到 401 未经授权
扩展 Yogendra Mishra 的回答。注意
client_id
和client_secret
也可以在授权header中发送。
Authorization: Basic ${Base64(<client_id>:<client_secret>)}
这适用于初始令牌调用(没有刷新令牌)和对 /openid-connect/token
端点
参考: https://developer.okta.com/docs/reference/api/oidc/#client-secret