gpt4 book ai didi

android - 使用 Retrofit 刷新 OAuth token 而不修改所有调用

转载 作者:IT老高 更新时间:2023-10-28 12:57:51 29 4
gpt4 key购买 nike

我们在我们的 Android 应用中使用 Retrofit 来与 OAuth2 安全服务器进行通信。一切正常,我们使用 RequestInterceptor 在每次调用中包含访问 token 。但是有时访问 token 将过期,并且需要刷新 token 。当 token 过期时,下一次调用将返回未经授权的 HTTP 代码,因此很容易监控。我们可以通过以下方式修改每个 Retrofit 调用:在失败回调中,检查错误代码,如果等于 Unauthorized,则刷新 OAuth token ,然后重复 Retrofit 调用。但是,为此,应该修改所有调用,这不是一个易于维护且良好的解决方案。有没有办法在不修改所有 Retrofit 调用的情况下做到这一点?

最佳答案

请不要使用拦截器来处理认证。

目前,处理身份验证的最佳方法是使用新的 Authenticator API,专为 this purpose 设计.

OkHttp 将自动询问 Authenticator 当响应为401 Not Authorised 重试上次失败的请求和他们一起。

public class TokenAuthenticator implements Authenticator {
@Override
public Request authenticate(Proxy proxy, Response response) throws IOException {
// Refresh your access_token using a synchronous api request
newAccessToken = service.refreshToken();

// Add new header to rejected request and retry it
return response.request().newBuilder()
.header(AUTHORIZATION, newAccessToken)
.build();
}

@Override
public Request authenticateProxy(Proxy proxy, Response response) throws IOException {
// Null indicates no attempt to authenticate.
return null;
}

Authenticator 附加到 OkHttpClient 与使用 Interceptors

的方式相同
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setAuthenticator(authAuthenticator);

在创建 Retrofit RestAdapter

时使用此客户端
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(ENDPOINT)
.setClient(new OkClient(okHttpClient))
.build();
return restAdapter.create(API.class);

关于android - 使用 Retrofit 刷新 OAuth token 而不修改所有调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22450036/

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