使用okhttp + ssl + basic auth进行身份验证失败

时间:2016-01-28 18:18:03

标签: android okhttp3

我使用okhttp3通过SSL +基本身份验证使用以下客户端构建器请求某些Web服务:

client = new OkHttpClient.Builder()
    .sslSocketFactory(sslContext.getSocketFactory())
    .hostnameVerifier(new HostnameVerifier() {
        @Override
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    })
    .authenticator(new Authenticator() {
        @Override
        public Request authenticate(Route route, Response response) throws IOException {
            String credential = Credentials.basic("myuser", "mypassword");
            return response.request().newBuilder()
                    .header("Authorization", credential)
                    .build();
        }
    })
    .build()

然后我用

运行请求
Request.Builder requestBuilder = new Request.Builder();
requestBuilder.url(url);
Request request = requestBuilder.build();

Call call = client.newCall(request);
Response response = call.execute();

我得到403(拒绝访问)。

我尝试使用cURL并且我得到了正确的身份验证。

我在authenticate函数中设置了一个断点,它似乎甚至没有被调用。

如果我直接在requestBuilder中设置标题,即

Request.Builder requestBuilder = new Request.Builder();
requestBuilder.url(url);
String credential = Credentials.basic("myuser", "mypassword");
requestBuilder.header("Authorization", credential).build();
Request request = requestBuilder.build();

Call call = client.newCall(request);
Response response = call.execute();

它有效。

有什么建议吗?

0 个答案:

没有答案