Веб-сервис SharePoint из Java Webapp, использующий CXF с аутентификацией Kerberos / NTLM - PullRequest
1 голос
/ 20 февраля 2012

У меня есть веб-приложение Java EE из веб-приложения. Мне нужно использовать веб-сервис SharePoint, который ожидает аутентификацию Kerberos / NTLM. Я использую CXF для использования веб-службы, а веб-приложение само использует встроенную проверку подлинности Windows для проверки подлинности.

1 Ответ

2 голосов
/ 22 февраля 2012

Взгляните на протокол SPNEGO, это то, что Sharepoint (технически IIS) использует для аутентификации единого входа. Я не знаком с CXF, но, как правило, большинство платформ WebServices позволяют вам предоставлять дополнительные заголовки с вашим запросом. В основном вам нужно:

1.  Get authentication token for the sharepoint from user session  

2.  Use JAAS to generate tokens.

Смотрите здесь http://appliedcrypto.com/spnego/spnego_jaasclient.html и здесь http://docs.oracle.com/javase/6/docs/technotes/guides/security/jgss/lab/part6.html для более подробной информации.

Для случая, когда вы хотите аутентифицировать пользователей браузера на sharepoint. Вы должны реализовать протокол SPNEGO в своем веб-приложении, например, вы можете использовать этот пакет, чтобы сделать это за вас. Большинство современных серверов приложений поддерживают протокол SPNEGO [JBoss, WebSphere]. После того, как вы внедрили протокол SPNEGO, вы можете получить токен kerberos из заголовка «Авторизация».

Тогда у вас есть два варианта:

  1. Если ваше веб-приложение запускается с тем же удостоверением, что и интерфейс SharePoint, вы можете просто отправить тот же токен на sharepoint.

  2. Если вы работаете под другим именем, вам нужно использовать токен пользователя, чтобы перейти в активный каталог и запросить билет на службу sharepoint от имени вашего пользователя. Учетная запись, под которой работает ваше веб-приложение, должна быть доверенной для делегирования в Active Directory

Кроме того, я не уверен, что SharePoint принимает маркеры kerberos в заголовках SOAP, я считаю, что вам нужно проходить аутентификацию с использованием заголовков HTTP.

Этот вопрос может вам помочь

Если вы хотите использовать функцию единого входа, то есть использовать текущую идентификацию пользователя, взгляните здесь

...