Refresh_token是在access_token過期之後,用來換新的access_token的,有了Refresh_token之後,使用者可以在很長一段時間不需要重新登入,這對於使用者體驗是有好處的;RequiredAction是一種登入階段的必選行為,當一個使用者被某個RequiredAction標記之後,使用者必須完成RequiredAction,才算完成本次登入。
Refresh_token階段是否會檢查RequiredAction
這個答案是否定的,當一個使用者登入之後,它在後臺被標記一個RequiredAction,對於已經產生的refresh_token是不會有影響的,你拿著refresh_token還是可以直接換新的access_token。
當使用者被禁用了,Refresh_token是否會被就叫影響
這個答案是肯定的,當一個使用者的enable為false時,使用者所產生的refresh_token就無法換回新的token了,這時會有http_status為400的錯誤返回
{
"error": "invalid_grant",
"error_description": "User disabled"
}
從keycloak原始碼中也是可以看到的,位於org.keycloak.protocol.oidc.endpoints.TokenEndpoint
型別的refreshTokenGrant()方法,有判斷使用者是否有效的方法,在`tokenManager.refreshAccessToken()方法中,如圖
從內部方法可以找到判斷使用者狀態的程式碼,如下
if (!user.isEnabled()) {
throw new OAuthErrorException(OAuthErrorException.INVALID_GRANT, "User disabled", "User disabled");
}
如果希望refresh_token階段對使用者的required action有所控制,可以在這裡新增對應的邏輯即可。