GSS_S_CONTINUE_NEEDED与apache http客户端

时间:2018-03-05 17:15:58

标签: java apache-httpcomponents spnego waffle

我正在尝试设置一个http客户端来验证spnego(apache http client 4.5.2)

以下是设置客户端的代码

    System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");

    final CredentialsProvider credsProvider = new SystemDefaultCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(null, -1, null), new KerberosCredentials(null));

    final HttpClientBuilder builder = HttpClientBuilder.create();
    builder.setDefaultCredentialsProvider(credsProvider);
    final ApacheHttpClient4Engine engine = new ApacheHttpClient4Engine(builder.build());
    final Client client = new ResteasyClientBuilder().httpEngine(engine).build();

在服务器上,我有一个JAX-RS服务,它位于waffle.servlet.NegotiateSecurityFilter后面,允许进行ntlm或spnego身份验证。

当我从我的chrome rest客户端发送我的HTTP请求时,它可以工作,使用协商成功完成身份验证。

但是当我尝试使用apache http客户端时,它会失败,并显示日志中的消息:

    2018-03-05 16:47:16,048 DEBUG o.a.h.impl.auth.GGSSchemeBase main Authentication already attempted   
    2018-03-05 16:47:16,048 DEBUG o.a.h.i.auth.HttpAuthenticator main Authentication failed   

经过一番进一步的调查后,我发现华夫饼过滤器正在使用GSS_S_CONTINUE_NEEDED,并以一个额外的挑战回应,而apache客户只是忽略并放弃了。

我已经针对使用spnego(由第三方提供)的另一项服务测试了我的apache客户端设置,并且它正常工作,但不使用continue令牌。

我不确定我的系统是否设置不正确,并且不应该发生继续令牌,或者apache http客户端配置不正确(或者根本不支持继续令牌)

这里有一张非常旧的票据https://issues.apache.org/jira/browse/HTTPCLIENT-1107表示已经添加了一些东西来处理其他挑战,但是通过阅读org.apache.http.impl.auth.GGSSchemeBase.parseChallenge(CharArrayBuffer, int, int)中的代码,它看起来好像只接受了第一个挑战。

0 个答案:

没有答案