При условии, что ваши API REST вызывается только веб-приложением, которое развертывается вместе с ними (в одной войне и, следовательно, совместно использующим один и тот же сеанс HTTP), вы можете использовать Spring SAML + Spring Security для их защиты.
Spring SAML будет использоваться для аутентификации пользователей с удаленного ВПЛ и заполнения их прав (предоставленных полномочий); Spring Security затем может использоваться для определения политик безопасности для API, вызываемых из пользовательского интерфейса.
Если вы хотите, чтобы вы могли обращаться к API REST от удаленных клиентов, вам может понадобиться зайти в проект Spring Security OAuth - так как это уже не веб-единый вход.
Можно создать центральную установку Spring SAML, которая обрабатывает всю логику SSO. Конечно, вам нужно будет реализовать механизм, в котором Spring SAML передает информацию об аутентифицированном пользователе и ее атрибутах другим вашим приложениям и делает это безопасным способом. Один из возможных способов подойти к нему (при условии приложения развернуты на том же домене, и поэтому могут обмениваться печенье) заключается в следующем:
- после аутентификации весной SAML установлен общий печенье, который виден всем остальным приложениям и которые например, подписанный ключом Spring SAML или зашифрованный с использованием общего ключа, cookie должен также содержать атрибуты пользователя.
- это можно сделать в пользовательском AuthenticationSuccessHandler, который, как ожидается, перенаправит пользователя в правильное приложение (например, на основе некоторой пользовательской логики или состояние реле)
- целевому приложению необходимо проверить файл cookie (путем проверки подписи или дешифрования с использованием общего ключа, возможно, выполнения других проверок), проанализировать атрибуты и начать собственный сеанс, который предварительно аутентифицирован на основе содержимого cookie
Все это может быть выполнено с использованием стандартных интерфейсов Spring Security и Spring SAML. Но это не тривиальная задача - в основном, учитывая, что любая уязвимость в вашей реализации может поставить под угрозу безопасность ваших приложений.
Я правильно понял, что вы хотели бы иметь одно развертывание Spring SAML, используемое несколькими приложениями, в отличие от интеграции Spring SAML отдельно в каждом из приложений? –
Да, ваше понимание верное. В основном другие приложения будут весенним отдыхом с реализацией безопасности. Это будет мой план по внедрению SSO для SPRING RESTful APPS. –
Какова наилучшая практика. Нужно ли нам продлить проект saml для повышения безопасности Spring для каждого приложения или у нас есть некоторая общая точка SP? Можем ли мы преобразовать текущее существующее Spring Security Extension для поддержки веб-служб REST? –