首页 > 解决方案 > 使用没有代理服务器的 OkHttpClient 进行抢先式身份验证

问题描述

根据https://square.github.io/okhttp/3.x/okhttp/,我认为只有在我们有代理服务器的情况下才能进行抢先式身份验证。

我们有一个资源/源服务器,它使用 Oauth 令牌授权客户端。

我们已经实现了授权 OkHttp Authenticator https://square.github.io/okhttp/3.x/okhttp/okhttp3/Authenticator.html。但是,客户端总是在没有授权标头的情况下发出请求,然后添加它。我们可以在单个请求中使用身份验证器并仍然向我们的资源服务器提供授权标头吗?我们可以预测挑战。但是,不确定是否可以避免在没有授权标头的情况下向服务器发出请求。

我们可以使用拦截器抢先添加标头。

是否可以在没有代理服务器的情况下使用 Authenticator 并抢先添加标头?

标签: okhttp

解决方案


您可以使用拦截器来实现抢先式身份验证。这为您提供了充分的灵活性。

你是对的,纯粹使用 Authenticator,同时总是响应失败的 401。

因此,像okhttp-digest这样的库会缓存身份验证方法以抢先实现。

https://github.com/rburgst/okhttp-digest/blob/master/src/main/java/com/burgstaller/okhttp/AuthenticationCacheInterceptor.java


推荐阅读