简短版: 我有一个Tomcat托管的Java Spring应用程序,我正在尝试访问使用Kerberos / NTLM身份验证的本地OData Web服务。该应用程序按计划自动调用Web服务。因此我没有登录用户。
到目前为止,我的研究让我相信Waffle API可能就是答案。但是我似乎无法指定用户和密码并成功进行身份验证。
有没有其他人设法做到这一点?
版本较长: 在我的测试实验室中,我设法使用Springs Rest Template成功访问该服务,并按如下方式添加NTCredentials:
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY, new NTCredentials(user, pass, null, domain));
CloseableHttpClient httpclient = HttpClientBuilder
.create()
.setDefaultCredentialsProvider(credsProvider)
.build();
RestTemplate restTemplate = new RestTemplate();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpclient);
restTemplate.setRequestFactory(requestFactory);
getUrl = "http://"+ host +":"+ port + getUrl;
ResponseEntity<String> response1 = restTemplate.exchange(getUrl, HttpMethod.GET, null, String.class);
但是,这不适用于客户端域。差异似乎是,在客户端域上,服务返回“Negotiate”的WWW-Authenticate属性而不是“NTLM”。这似乎意味着它试图使用kerberos。
从此开始,我使用Spring Boot和Waffle编写了一个独立的应用程序。这可以使用登录用户(启动应用程序的用户)的kerberos票证成功调用客户端域上的服务。在我的tomcat托管应用程序中,没有登录用户。因此,我需要强制该应用程序使用特定用户。然后我尝试使用IWindowsAuthProvider.logonUser和IWindowsAuthProvider.impersonate方法但没有成功。
非常感谢任何帮助