2014-11-25 3 views
3

У меня есть Restful Java Web-приложение, которое должно быть развернуто в нескольких разных средах (вне моего контроля), которые будут использовать решение SSO SAML 2.0.Интеграция Java Web App с SAML SSO

Мое приложение (которое, как мне кажется, является «поставщиком услуг»), должно сохранять состояние, сгенерированное пользователем, и использует внутреннюю бизнес-логику, чтобы определить, какие пользователи могут просматривать или обновлять данные других пользователей. Чтобы это работало, нам нужно знать, кто такой пользователь, и от каких групп он входит. Но как мне получить эту информацию?

В идеале мое веб-приложение будет агностиком SSO и будет искать некоторые настраиваемые заголовки ключей в http-запросах для получения этой информации, например. токен SAML в запросе, который может быть проанализирован, или, возможно, некоторые пользовательские заголовки, характерные для моего «поставщика услуг».

Большого спасибо

+0

Не являются ли файлы cookie сеансов, обычно используемые для аутентификации пользователей в RESTful SSO? – user3334871

+0

Я бы посмотрел Spring Security или Apache Shiro, оба могут обернуть веб-контекст, чтобы обеспечить различные механизмы аутентификации и хранения пользователей. – eckes

ответ

0

вы можете запустить обратный прокси-сервер в передней части веб-приложений Java для обработки детали протокола и реле идентичности пользователя информации SSO для применения в HTTP-заголовках; для SAML 2.0 есть mod_auth_mellon: https://github.com/UNINETT/mod_auth_mellon

+0

Спасибо Хансу - ты указал мне в правильном направлении. Использование какого-либо агента должно позволить мне сопоставлять между токенами и заголовками HTTP. Для OpenAM есть ссылка на это здесь: http: // stackoverflow.ком/вопросы/16414460/как к орудию-openam-SSO к моим существовавшими-веб-приложений – Paul

1

Вы правы, ваше приложение является поставщиком услуг, и у вас будет внешний поставщик удостоверений (IdP) для аутентификации.

В основном вам необходимо предоставить запрос аутентификации IdP (через HTTP-протокол POST или обратный канал SOAP/независимо от того, что они поддерживают), и использовать аутентификационный запрос от IdP, чтобы принять ваше решение о том, являются ли они теми, кого они говорят находятся. Как правило, вы должны иметь возможность получить тему участника (то есть имя пользователя) и любые членства в группе из authnResponse, однако точно, как это работает, будет зависеть от того, что IdP настроен или не настроен.

Прежде чем вы это сделаете, вам необходимо будет обменять метаданные SAML на IdP (обычно это часть регистрации как SP с IdP), которая дает обеим сторонам такие вещи, как публичный сертификат X509 для подписания и проверки запросов.

Там хорошая весна библиотека для поддержки SP SAML, http://docs.spring.io/autorepo/docs/spring-security-saml/1.0.x-SNAPSHOT/reference/htmlsingle

0

Если это делается в Java и работает на контейнер сервлетов (Tomcat, JBoss, и т.д.), то агент может быть реализован в виде веб-аутентификации (сервлет) (добавьте в web.xml). Пользователь обычно выводится из ответа SAML Auth < saml: NameID > или из < saml: Атрибут >, соответствующий атрибуту userid (uid, email и т. Д.). Этот пользователь должен быть проверен против репозитория личных данных веб-приложения (может быть LDAP, базы данных и т. Д.) И вычислений соответствующих групп. Вместо использования произвольных заголовков или пользовательского представления для аутентифицированного пользователя рассмотрите возможность использования java Principal (для пользователей и групп) в Тема. Фильтр затем может запускать остальную часть цепи фильтра в Subject.doAs(). Таким образом, Тема можно найти там, где в нижнем коде, используя Subject.getSubject().

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