1

简短版本:我有一个 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);

但是,这不适用于客户端域。不同之处似乎在于,在客户端域上,服务返回的是“协商”而不是“NTLM”的 WWW-Authenticate 属性。这似乎暗示它正在尝试使用 kerberos。

从这开始,我使用 Spring Boot 和 Waffle 编写了一个独立的应用程序。这可以使用登录用户(启动应用程序的用户)的 kerberos 票证成功调用客户端域上的服务。在我的 tomcat 托管应用程序中,没有登录用户。因此,我需要强制应用使用特定用户。然后我尝试使用 IWindowsAuthProvider.logonUser 和 IWindowsAuthProvider.impersonate 方法但没有成功。

对此的任何帮助将不胜感激

4

0 回答 0