Keycloak会话管理-refreshToken
Keycloak会话管理中,获取到accessToken和refreshToken后,基于accessToken交换用户数据或者参与KeycloakAPI的请求,当accessToken过期的时候,可使用refreshToken去交换新的accessToken和refreshToken。
我们可能会遇到这样一个情况:当refreshToken在请求的时候也过期了,这个时候,需要回到登录页面。如果按照这样的流程走,将带来较差的体验,需要用户重新登录,尤其在较多模块中,这种方案极不可取。
我们先从正常的角度去请求token、基于refreshToken交换token、基于offlineToken交换token
基于Oauth2-password获取token
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'grant_type=password&client_id=ROOMIS&username=123&password=123' "http://keycloak域名IP/auth/realms/{realms名字}/protocol/openid-connect/token" | jq
基于refreshToken获取accessToken和refreshToken curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'grant_type=refresh_token&client_id=ROOMIS&refresh_token={refreshToken}' "http://keycloak域名IP/auth/realms/{realms名字}/protocol/openid-connect/token" | jq
请求后的结果如上图所示。
备注
1 基于上述获取的refreshToken是有失效期的,当刚刚好refreshToken失效的时候,将不再获取accessToken,只能重新登录。 2 官方的解决办法是获取离线token,请参照:https://www.keycloak.org/docs/3.2/server_admin/topics/sessions/offline.html
解决方法是:在请求token的时候,假如scope=offline_access