Waffle Java Client: как использовать пользователя определенного домена для аутентификации на веб-сервисе - PullRequest
0 голосов
/ 31 мая 2018

Краткая версия : у меня есть приложение Java Spring, размещенное на Tomcat, и я пытаюсь получить доступ к локальной веб-службе OData, которая использует аутентификацию Kerberos / NTLM.Приложение вызывает веб-сервис автоматически по расписанию.Таким образом, у меня нет авторизованного пользователя.

Мое исследование до сих пор заставило меня поверить, что Waffle API может быть ответом.Однако я не могу указать пользователя и пароль и успешно пройти аутентификацию.

Кому-нибудь еще удалось это сделать?

Более длинная версия : в моей тестовой лабораторииМне удалось успешно получить доступ к сервису с помощью шаблона отдыха Springs и добавить к нему 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);

Однако это не работает в домене клиентов.Разница, по-видимому, заключается в том, что в домене клиентов служба возвращает атрибут WWW-Authenticate «Согласовать», а не «NTLM».Кажется, это подразумевает, что он пытается использовать kerberos.

Исходя из этого, я написал отдельное приложение, использующее Spring Boot и Waffle.Это может успешно вызвать службу в домене клиентов с помощью билета Kerberos для вошедшего в систему пользователя (который запустил приложение).В моем размещенном в tomcat приложении нет авторизованного пользователя.Поэтому мне нужно заставить приложение использовать конкретного пользователя.Затем я безуспешно пытался использовать методы IWindowsAuthProvider.logonUser и IWindowsAuthProvider.impersonate.

Любая помощь с этим будет принята с благодарностью

...