Проверка подлинности HTTP «согласование» через NTLM от клиента Java SE6 в Windows - PullRequest
6 голосов
/ 09 мая 2011

Кто-нибудь знает, способен ли клиент Java 6, работающий в Windows, проходить аутентификацию через NTLM при доступе к серверу Microsoft, который реализует протокол аутентификации SPNEGO?

Насколько я понимаю, Java 6, работающая в Windows, имеет встроенную поддержку SPNEGO, но, похоже, реализация Java не пытается выполнить аутентификацию NTLM в случае, если аутентификация kerberos невозможна.Пример Authenticator , представленный в документации Sun, завершается с ошибкой 401 Unauthorized в ответ на отправку сервером WWW-Authenticate: Negotiate .

Вот описание тестовой среды:

Целевой сервер:

  • Автономный сервер Windows 2008 R2 (не является частью домена AD))
  • Служба Microsoft SOAP, реализованная с использованием WCF
  • WCF настроен для аутентификации SPNEGO (kerberos и NTLM)
  • Сервер WCF не может быть перенастроен для поддержки других режимов аутентификации: (

Клиентский компьютер:

  • 64-разрядная автономная рабочая станция Windows 7 (не входит в домен)
  • Клиент Java SE6, на котором выполняетсяПример Sun SPNEGO

Конечная цель - использовать Apache CXF 2.4.0 для вызова служб SOAP на сервере WCF. Перед добавлением сложностей CXF и SOAP я пытался получить WSDL изсервер с помощью простого Java тестовое приложение для решения проблем аутентификации.

FWIW - я могу получить доступ к серверу WCF из IE, используя локальный логин администратора для сервера Windows.Я также смог создать клиент Delphi XE SOAP без какой-либо специальной конфигурации авторизации.SOAP-клиент Delphi использует WinInet под капотом.

1 Ответ

2 голосов
/ 24 июля 2011

Java SPNEGO способен к Kerberos только потому, что NTLM является проприетарной устаревшей технологией MS.Если ваша целевая машина не является частью домена, как в вашем случае, вам не повезло.Вы должны переключиться на аутентификацию DIGEST-MD5, если можете.

...