【问题标题】:'Refresh token expired exception' - AppAuth Android'刷新令牌过期异常' - AppAuth Android
【发布时间】:2020-04-21 07:54:00
【问题描述】:

我在我的 android 应用程序中使用 appAuth 和 Keycloak 进行身份验证。大约 25 分钟后,访问令牌过期。当我在这段时间之后尝试刷新令牌时,我收到此错误:

Failed to authorize = AuthorizationException: {"type":2,"code":2002,"error":"invalid_grant","errorDescription":"Refresh token expired","errorUri":""}

为了刷新令牌,我调用 performActionWithFreshTokens 并传入我之前从 TokenResponse 收到的 refreshToken。

Map<String, String> refreshTokenAdditionalParams = new HashMap<>();
refreshTokenAdditionalParams.put(Constants.REFRESH_TOKEN,getAuthState().getRefreshToken());
Log.i(TAG, "Refresh Token from AuthState:"+ getAuthState().getRefreshToken());

mAuthStateManager.getCurrent().performActionWithFreshTokens(mAuthService,clientAuthentication,refreshTokenAdditionalParams, (accessToken, idToken, ex) -> {
    Log.i(TAG, "Access Token :"+ accessToken + "id Token :"+ idToken );
    Log.i(TAG, "Token Response :"+ mAuthStateManager.getCurrent().getLastTokenResponse());
    if (ex != null) {
        // negotiation for fresh tokens failed, check ex for more details
        if (ex.errorDescription.contains(Constants.TOKEN_EXPIRED)) {
            CommonHelper.getAccessDeniedFailure(false);
            return;
        }
    }

    mAuthStateManager.getCurrent().update(mAuthStateManager.getCurrent().getLastTokenResponse(), ex);
    if (getAuthState().isAuthorized()) {
        SessionManager.UserDetail detail = sessionManager.getUserDetails();
        if (detail == null) {
            detail = new SessionManager.UserDetail();
        }
        detail.updateAuthToken(getAuthState().getAccessToken());
        detail.updateRefreshToken(getAuthState().getRefreshToken());
        sessionManager.createUserSession(detail);
        sessionManager.setLastActivityTime(System.currentTimeMillis());
    }
    callback.onTokenRequestCompleted(mAuthStateManager.getCurrent().getLastTokenResponse(), ex);

});

在决定将 refreshToken 作为附加参数传入函数之前,我认为我调用 performActionWithFreshTokens 的事实会自动解决此异常。我仍然得到错误。然后我决定将refreshToken作为参数传入,但我仍然得到异常并且返回的accessToken和idToken为null。

我不确定如何解决此问题。有没有其他人遇到过这个问题? 谢谢。

【问题讨论】:

  • 是的,遇到了同样的问题。你修好了么。

标签: android keycloak appauth


【解决方案1】:

我在使用 appAuth 和 Keycloak 时遇到了与您相同的行为。 这似乎与您领域的 Keycloak 中的设置有关。

这个答案为我解决了问题(https://stackoverflow.com/a/67624190/2259378

总之,刷新令牌的最大生命周期是 Keycloak 中这四个变量中的较小值: (SSO 会话空闲、客户端会话空闲、SSO 会话最大值和客户端会话最大值)

【讨论】:

    猜你喜欢
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 2015-11-04
    • 2019-08-05
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多