Waffle Java Client:如何使用特定域用户对Web服务进行身份验证

时间:2018-05-31 09:37:48

标签: java spring kerberos ntlm waffle

简短版: 我有一个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方法但没有成功。

非常感谢任何帮助

0 个答案:

没有答案