2017-02-17 8 views
1

В настоящее время мы разрабатываем приложение для клиента. Проект имеет ограничение на то, что мы будем поставлять только развернутые файлы WAR. Клиент предоставляет инфраструктуру и не допускает большого отклонения от нее.Spring-Security + SAML: разрешить несколько приложений, выступающих в качестве одного поставщика услуг

Приложение разработано с использованием Spring Boot, Spring Security и SAML. Текущая версия представляет собой один монолитный WAR-файл.

В настоящее время мы находимся в процессе разделения этого монолитного приложения в отдельных приложениях по нескольким причинам (ремонтопригодность, развертывание, качество кода, ...). К сожалению, мы пока не знаем, как реализовать авторизацию с этими данными ограничениями:


инфраструктуры ограничения:

  • Приложения будут размещены на JBoss EAP 7,0
  • предоставляется Обычай Идентичность Provider заказчиком
  • Связь с IdP должна быть реализована с помощью SAML 2.0

Обычай IdP имеет следующие ограничения:

  • Аутентификация осуществляется через прокси-сервер, который означает, что только пользователям, прошедшим проверку прийти к заявке могут быть предоставлены
  • только файл метаданных один SP, потому что он связан с пользовательской базой данных. Мы хотим использовать одну и ту же пользовательскую базу данных для всех приложений.
  • Файл SP метаданных может предоставить только один AssertionConsumerService-Location
  • AssertionConsumerService-Location статически определены в файле метаданных и не может быть переопределен в AuthnRequest

Описание проблемы:

Каждое приложение должно авторизоваться с IdP для получения ролей и утверждений. При текущем (монолитном) развертывании это не проблема, поскольку нам требуется только один AssertionConsumerService. С новой архитектурой каждое приложение может перенаправить на IdP, но IdP может перенаправлять только на статически настроенную ACS. Как каждое приложение может получать сообщение AuthnResponse, когда возможно только одно ACS?

Любые идеи?

ответ

0

С точки зрения стандартов SAML это может быть достигнуто с помощью прокси-сервера SAML IdP. Ваши приложения, действуя как ServiceProviders, обмениваются данными с IdP-частью IdP Proxy. Фактический IdP связывается с SP отдельно от IdP Proxy (так что существует только один URL-адрес ACS).

+0

Да, это звучит как возможное решение. Но реализация собственного IdP звучит как большая работа. Знаете ли вы о существующих библиотеках, которые уже это делают? – Dave

+0

Я не знаю, есть ли одна библиотека, которая реализует прокси IdP, но есть некоторые проекты/продукты, которые предлагают эту функциональность.Тем не менее, это дополнительный компонент инфраструктуры, который нужно развернуть, поддерживать и управлять, но это единственный основанный на стандартах подход, который, как я знаю, работает нормально –

+0

Я столкнулся с этим, исследуя ту же проблему - я не пробовал, но https: //github.com/OpenConext/OpenConext-idensys, по-видимому, является прокси-сервером SAML на основе Java, который может предложить путь вперед. –

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