Keycloak會話管理-refreshToken

Keycloak會話管理中,獲取到accessToken和refreshToken後,基於accessToken交換用戶數據或者參與KeycloakAPI的請求,當accessToken過時的時候,可以使用refreshToken去交換新的accessToken和refreshToken。html

咱們可能會遇到這樣一個狀況:當refreshToken在請求的時候也過時了,這個時候,須要回到登陸頁面。若是按照這樣的流程走,將帶來較差的體驗,須要用戶從新登陸,尤爲在較多模塊中,這種方案極不可取。session

咱們先從正常的角度去請求token、基於refreshToken交換token、基於offlineToken交換tokenapp

基於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

 請求後的結果如上圖所示。curl

  

備註
1
基於上述獲取的refreshToken是有失效期的,當剛恰好refreshToken失效的時候,將再也不獲取accessToken,只能從新登陸。 2 官方的解決辦法是獲取離線token,請參照:https://www.keycloak.org/docs/3.2/server_admin/topics/sessions/offline.html

   解決方法是:在請求token的時候,假如scope=offline_accessurl

相關文章
相關標籤/搜索