首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘刷新令牌过期异常’- AppAuth Android

‘刷新令牌过期异常’- AppAuth Android
EN

Stack Overflow用户
提问于 2020-04-21 15:54:00
回答 1查看 1K关注 0票数 3

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

代码语言:javascript
复制
Failed to authorize = AuthorizationException: {"type":2,"code":2002,"error":"invalid_grant","errorDescription":"Refresh token expired","errorUri":""}

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

代码语言:javascript
复制
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作为additionalParameters传入函数之前,我认为调用performActionWithFreshTokens会自动解决此异常。我仍然得到了错误。然后,我决定将refreshToken作为参数传入,但仍然会得到异常,返回的accessToken和idToken为空。

我不确定还能有什么办法解决这个问题。还有没有人遇到过这个问题?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-08-16 17:27:53

我用appAuth和Keycloak得到了和你一样的行为。这似乎与你的领域的密钥罩中的设置有关。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61338509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档