SAML2 SSO Assertion Consumer

У меня есть заказчик, который хочет внедрить систему единого входа с использованием подхода на основе утверждений SAML2. Заказчик будет поставщиком удостоверений (IDP), а мое приложение будет фактически поставщиком услуг (SP).

Раньше я реализовывал решения SSO, где IDP был Oracle Access Manager, и поэтому нам был предоставлен файл idp.xml, который позволил нам настроить нашу среду SP с помощью поставляемого Fedlet. Это удобно создало соответствующий файл WAR, который после развертывания позволил мне передать файл sp.xml клиенту, который импортировал его в свой IDP. Все это работало нормально, и я понимаю концепции, т.е. мы получаем первоначальный запрос, Fedlet обрабатывает это и отправляет пользователя к IDP, где они проходят аутентификацию, а затем они передаются обратно нашему SP с ответом SAML, который Fedlet позволяет нам проанализировать и извлечь некоторые данные, идентифицирующие пользователя. Затем я делаю то, что требуется, чтобы подписать их в нашем приложении.

Однако текущее требование не использует какую-либо внутреннюю структуру для предоставления IDP, они заявили, что она создана специально. Они предоставили мне URL-адрес IDP и файл сертификата и запрашивают наши «AssertionConsumerServiceURL» и «AudienceURI».

Приложение, для которого я включаю SSO, в основном основано на Java. Мое расследование до сих пор привело меня к решению OpenAM от Forgerock, а также к OpenSAML от Shibboleth. Однако я борюсь с первым шагом, по сути, с того, где я начинаю создавать пользовательское приложение SP, подключающееся к стороннему IDP с помощью OpenAM / Shibboleth / AnotherFramework.

Любые указатели были бы очень полезны.

Спасибо, Ли


person lee_mcmullen    schedule 18.02.2013    source источник


Ответы (4)


Зависит от ваших требований. OpenAM feldlet или Shibboleth, вероятно, лучший подход, поскольку вам не нужно делать так много кода самостоятельно.

OpenSAML - это набор инструментов очень низкого уровня для обработки сообщений SAML. Я бы не рекомендовал его, если он действительно не нужен.

Что касается того, о чем они просят, AssertionConsumerServiceURL - это конечная точка службы, куда вы получаете сообщения SSO SAML.

Определение AudienceURI довольно серое. Обычно вы отправляете им идентификатор, они включают его в свои сообщения, и вы подтверждаете, что этот идентификатор совпадает с тем, что вы им дали. Я сам не понимаю разницы между этим и местом назначения ...

Я немного удивлен, что они просят вас об этом. Стандартный способ сделать этот первый обмен информацией - это документы метаданных SAML.

person Stefan Rasmusson    schedule 19.02.2013
comment
Привет, Стефан, да, я тоже был удивлен, что они попросили сделать это таким образом. Мне кажется, что они развернули собственное решение IDP вместо того, чтобы использовать легкодоступное (например, OpenAM и т. Д.), И их решение не имеет метаданных IDP. Итак, я извлек сертификат X509 из сертификата, который они отправили, и попытался создать метаданные IDP от их имени. Затем я импортировал это в фидлет OpenAM и развернул в Tomcat. Они пытаются запустить систему единого входа, инициированную IDP, но я получаю сообщение "Эмитент в ответ недействителен", и теперь я пытаюсь устранить неполадки. - person lee_mcmullen; 20.02.2013
comment
IPD инициировал SSO? Не инициирован ИП? Проблема с эмитентом заключается в том, что эмитент в ответе SAML должен совпадать с entityID вашего IDP. - person Stefan Rasmusson; 20.02.2013
comment
Спасибо. Я обновил entityID в метаданных IDP до того, что они сообщили эмитенту, но с тех пор они изменили его (не сообщая мне!). Итак, я обновил конфигурацию, чтобы она соответствовала снова, и теперь я получаю этот поставщик услуг не для целевой аудитории. SAMLResponse содержит элемент saml: Audience, по-видимому, он должен соответствовать чему-то в моей конфигурации, просто просматривая все, чтобы выяснить, что. - person lee_mcmullen; 20.02.2013
comment
Только что нашел эту статью (fusionsecurity .blogspot.co.uk / 2011/08 /), который предполагает, что элемент ‹saml: Audience› должен соответствовать entityID моего SP. Так что я попрошу их обновить это и попробовать. - person lee_mcmullen; 20.02.2013
comment
Да, я не думаю, что это должен быть идентификатор объекта, но это нормальный способ сделать это. Если у вас есть еще вопросы, я думаю, лучше начать новый вопрос. Считаете ли вы ответ на вопрос? - person Stefan Rasmusson; 20.02.2013
comment
Да, обновив аудиторию, чтобы она соответствовала моему идентификатору объекта SP, отсортировала его. Все работает сейчас. Спасибо за вашу помощь. Помечено как ответ. - person lee_mcmullen; 20.02.2013

Как вы, возможно, знаете, OpenAM также предоставляет FedLet, которая представляет собой облегченную реализацию SAML2.0 SP. Если вы хотите сделать все самостоятельно, вам нужно самостоятельно собрать SAML2.0 SP.

Если вы хотите возиться со Spring, вы также можете использовать расширение Spring Security SAML2. 'http://static.springsource.org/spring-security/site/extensions/saml/index.html '

person Bernhard Thalmayr    schedule 19.02.2013
comment
Привет, да, я пошел по маршруту Fedlet OpenAM, но мне пришлось вручную создать метаданные IDP на основе их сертификата, что было проблемой (см. Мой комментарий к ответу Стефана выше). Теперь пытаемся устранить последствия! В ответ на другой ваш вопрос о Spring, к сожалению, это не относится к проекту Spring. - person lee_mcmullen; 20.02.2013

Зачем внедрять эти тяжелые решения SAML? Вы видели PingOne APS (службы поставщика приложений) или PingFederate из Ping Identity? Вы можете внедрить APS менее чем за день, и первая конфигурация клиента бесплатна. Включает в себя отчеты на панели инструментов, функцию самообслуживания IDP для настройки и чрезвычайно простую интеграцию REST API для вашего приложения. [Примечание: я работаю в Ping.]

person Ian    schedule 19.02.2013
comment
Спасибо, Ян. Я никогда не пользовался вашими продуктами, так какую же выгоду от использования PingFederate я получил бы от использования Fedlet OpenAM? - person lee_mcmullen; 20.02.2013

Вы можете настроить расширение SAML Spring Security. Расширение создает AssertionConsumerServiceURL, и если они хотят получить доступ к вашим метаданным так же, как вы получаете доступ к их, им просто нужно будет перейти на www.yourwebsite.com/saml/metadata, и они загрузят ваши метаданные SP.

person Calvin Raveenthran    schedule 19.05.2017