gpt4 book ai didi

android - '刷新 token 过期异常' - AppAuth Android

转载 作者:行者123 更新时间:2023-12-05 00:04:56 24 4
gpt4 key购买 nike

我在我的 Android 应用程序中使用 appAuth 和 Keycloak 进行身份验证。大约 25 分钟后,访问 token 将过期。当我在此期间后尝试刷新 token 时,出现此错误:

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

为了刷新 token ,我调用了 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 作为函数中的 additionalParameters 传递之前,我认为调用 performActionWithFreshTokens 这一事实会自动解决此异常。我仍然得到错误。然后我决定将 refreshToken 作为参数传入,但我仍然得到异常并且返回的 accessToken 和 idToken 为空。

我不确定还有什么方法可以解决这个问题。还有其他人遇到过这个问题吗?谢谢。

最佳答案

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

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

综上所述,刷新 token 的最大生命周期是 Keycloak 中这四个变量的较小值:(SSO session 空闲、客户端 session 空闲、SSO session 最大值和客户端 session 最大值)

关于android - '刷新 token 过期异常' - AppAuth Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61338509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com