Authentication 如何使用符合JAX-RS 2.0的RESTEasy客户端API启用NTLM身份验证?

Authentication 如何使用符合JAX-RS 2.0的RESTEasy客户端API启用NTLM身份验证?,authentication,client,resteasy,ntlm,Authentication,Client,Resteasy,Ntlm,默认情况下,向需要NTLM身份验证的安全资源发送带有RESTEasy客户端API的请求会导致HTTP响应,其状态为401 Unauthorized和头WWW-Authenticate:NTLM 如何使用RESTEasy客户端API启用NTLM身份验证,以及如何提供凭据 已经有相关的问题和有用的答案: 它们有些过时(使用不推荐的和遗留的API),并且要求略有不同 在使用JAX-RS 2.0兼容的RESTEasy客户端API从Java使用托管在Internet信息服务(IIS)上的ASP.

默认情况下,向需要NTLM身份验证的安全资源发送带有RESTEasy客户端API的请求会导致HTTP响应,其状态为
401 Unauthorized
和头
WWW-Authenticate:NTLM

如何使用RESTEasy客户端API启用NTLM身份验证,以及如何提供凭据

已经有相关的问题和有用的答案:

它们有些过时(使用不推荐的和遗留的API),并且要求略有不同


在使用JAX-RS 2.0兼容的RESTEasy客户端API从Java使用托管在Internet信息服务(IIS)上的ASP.NET Web API REST服务的任务中遇到了困难之后,我想在回答这个问题时与大家分享我的经验。

RESTEasy客户端API的身份验证由封装的客户端完成。我在回答中提到的版本3.0.19.Final与JAX-RS2.0兼容,附带两个实现。两者都可以进行NTLM身份验证

使用默认值 即使它是默认引擎,您也需要设置一个自定义实例来提供凭据。首先,必须将混凝土添加到a中。下一步是将其设置在发动机上,然后再次需要将其提供给发动机

Credentials-Credentials=新的NTCredentials(“用户”、“密码”、“工作站”、“域”);
CredentialsProvider CredentialsProvider=新的BasicCredentialsProvider();
credentialsProvider.setCredentials(
新的AuthScope(null,AuthScope.ANY_端口,AuthScope.ANY_领域,AuthSchemes.NTLM)
资格证书
);
HttpClientContext httpContext=HttpClientContext.create();
httpContext.setCredentialsProvider(credentialsProvider);
try(CloseableHttpClient-httpClient=HttpClientBuilder.create().build();){
ApacheHttpClient4Engine=新的ApacheHttpClient4Engine(httpClient,httpContext);
ResteasyClient客户端=新的ResteasyClientBuilder().httpEngine(engine).build();
//与客户合作
}
使用 该引擎利用一个以某种方式调用to-do身份验证的。要提供凭据,必须在自定义子类中重写并将其注册为默认值

公共类NTLMAuthenticator扩展了验证器{
@凌驾
受保护的密码身份验证getPasswordAuthentication(){
返回新的密码身份验证(“域\\用户”,“密码”.tocharray());
}
}
Authenticator.setDefault(新的NTLMAuthenticator());
恢复周期客户端=
新的ResteasyClientBuilder().httpEngine(新的URLConnectionEngine()).build();
//与客户合作
client.close();
资源