2015-01-30 6 views
4

У нас есть сайт, работающий на Caucho Resin. Подавляющее большинство сайтов - JSP/Java. У нас есть собственная аутентификация на сайте, а это означает, что мы не используем сторонние платформы проверки подлинности. Мы размещаем сайт, а не наши клиенты.Как мне поговорить с ADFS с Java?

Наши крупные клиенты хотят, чтобы их пользователи регистрировались на нашем сайте с их активными учетными данными. Для этого я предполагаю, что буду разговаривать с ADFS с SAML, пожалуйста, поправьте меня, если это не так.

Итак, мой вопрос: как мне это сделать с Java? из того, что я могу сказать, есть OpenSAML, который звучит так, будто он не делает все, и если я хочу больше, мне нужно использовать Shibboleth. Существуют ли другие альтернативы? если все, что я хочу, для пользователей, чтобы иметь возможность войти в систему, что является моим лучшим вариантом?

Любая информация поможет. Спасибо.

EDIT: Я только что узнал, что другим вариантом будет OAuth. Плюсы? Минусы?

ответ

9

Ваше приложение должно действовать как SAML SP, либо напрямую (из вашего кода), либо косвенно (например, через поддержку SAML SP на обратном прокси, сервере приложений, ...).

Для прямых вариантов (которые требуют больше изменений в приложение), вы можете:

  • кодируют SAML SP себя (скорее всего, с OpenSAML, вы можете найти примеры в источниках существующих продуктов)
  • использовать готовый продукт для интеграции в приложения, такие как Spring SAML или OpenAM Fedlet

для в прямые варианты (которые требуют меньше изменений в приложение), вы можете:

  • использование Shibboleth SAML SP plugins на вашем Apache обратный прокси-сервер (если вы используете один)
  • развернуть SAML SP в качестве другого приложения на контейнере (например, Spring SAML или OpenAM) и заставить его взаимодействовать с вашим приложением - поэтому SAML SP выполняет аутентификацию с помощью ADFS и передает это сообщение вашему приложению, например. через общий файл cookie или пользовательский токен

Более подробные и подробные сведения о сравнении in this thread.

ADFS 3 должен иметь поддержку сервера авторизации OAuth, и, возможно, это будет более простой способ интеграции, см. here и here. Реализация аутентификации с использованием OAuth обычно значительно проще, чем SAML, без каких-либо существенных недостатков.

+0

Вместо использования OAuth ADFS должен поддерживать SAML, я работал в ADFS, где мое приложение выступает в качестве поставщика услуг, способного подключать сервер ADFS с использованием ADFS url: adfs/ls и использовать файл метаданных ADFS. с другой стороны, в конфигурации ADFS. Я настраиваю ADFS, чтобы узнать о IDP, к которому мое приложение подключается в вашем случае shiboleth, и загружает метаданные IDP. и на основе сопоставления претензий и проверки сертификата x.509, я могу выполнить аутентификацию –

4

Аутентификаторы смолы, которые предоставляет Caucho, не помогут в федерации. Вместо этого вам нужно добавить ServletFilter, который ищет не прошедших проверку пользователей. Когда он найдет его, вы должны направить их на страницу входа. На этом вы должны спросить у пользователя, хотите ли они войти в систему прямо на ваш сайт или присоединиться к другой организации. (Это может быть сделано путем отображения формы имени пользователя и пароля + логотипы доверенных сторонних организаций.) В первом случае прямого входа в систему используйте Resin Authenticator для проверки против вашего репликации локального пользователя или, тем не менее, вы делаете это сейчас. Для федеративного случая используйте SAML.

Федерация начнет с отправки запроса на аутентификацию доверенного партнера (сервера ADFS). Это a little XML document, упакованный в форму, которая потребует нескольких вещей, которые нужно изменить для каждого запроса (например, время создания). Это можно сделать с помощью String.format - ничего сложного. Отправьте этот запрос аутентификации на сервер SAML (например, ADFS) в организации, которую выбрал пользователь. Они войдут в систему и отправят ответ на аутентификацию на некоторые «Assertion Consumer Service», которые вам нужно создать.

ACS - это только конечная точка, которая получает ответ аутентификации SAML. Это должна быть не прошедшая проверку подлинность конечная точка, которая будет анализировать и проверять ответ от ADFS. Используйте OpenSAML для этого. Вам нужно сделать немало вещей, чтобы убедиться, что это действительно так. Например, вы должны проверить цифровую подпись утверждения. Вам также нужно проверить время проблемы, что это не в будущем. Убедитесь, что это утверждение для вас путем проверки адресата в данных подтверждения, аудитории и получателя. Etc. и т. Д.

Если это не соответствует требованиям кода, ознакомьтесь с открытым исходным кодом или коммерческим сервером SAML. Он должен функционировать как SP и должен работать в Resin, чтобы все было просто. Один из кандидатов, средний и худой, - Asimba. (The company I work for является разработчиком этого проекта.) Вы можете развернуть это в Resin, и он позаботится о запросе и ответе.

Примечание о OAuth

Что вы обдумываете здесь федерации (или веб единого входа на). OAuth не подходит для федерации. Это протокол, предназначенный для делегирования полномочий. OpenID Foundation расширил OAuth 2 для поддержки федерации в профиле OpenID Connect OAuth. ADFS не поддерживает этот протокол федерации и ограничивается WS-Federation и SAML. Поэтому вы не должны смотреть в OAuth, если ADFS будет использоваться вашими партнерами.

 Смежные вопросы

  • Нет связанных вопросов^_^