Подходит ли spring-authorization-server
для подключения к существующему серверу OIDC, предоставленному моим предприятием? Похоже, что spring-authorization-server
предоставляет возможность создавать и настраивать эти потоки аутентификации, и мы также можем использовать github и google в качестве федеративных (социальных) поставщиков аутентификации, но я пытаюсь определить, могу ли я подключиться к службе аутентификации моей организации.
Мы развертываем наш стек приложений из нескольких приложений Spring Boot в анклаве, а также развертываем в другой сети, доступной для более широкой аудитории. Каждая из этих сетей имеет свой собственный сервер OIDC, поэтому я предполагаю, что каждое из приложений взаимодействует с сервером аутентификации Spring, и сервер аутентификации Spring будет настроен в каждой сети для предоставленного сервера аутентификации этой сети. Я хочу, чтобы стек приложений (в целом) был как можно более переносимым, и я хочу изолировать различия между двумя средами развертывания только в конфигурации, если это возможно.
Я знаю, что могу настроить клиент Spring Security oauth2 в каждом из приложений для связи с сервером OIDC моей компании, но я бы предпочел по возможности избегать этого.
Итак, мой вопрос: как я могу указать spring-authorization-server на внешний сервер OIDC (это не google или github)? Я провел обширный поиск и просмотрел множество учебных пособий и примеров. Кажется, что это должно быть что-то, что Spring хотел бы показать в своих примерах, но это явно отсутствует. Это заставляет меня думать, что он не предназначен для того, чтобы делать то, что я хочу, но я надеюсь, что я просто что-то упускаю.
@ch4mp Спасибо. Я взгляну. Не могли бы вы привести меня к конкретному примеру?
Я вижу, что вы используете 3 провайдера аутентификации, но вы не включили spring-authorization-server в свои примеры.
Сервер авторизации Spring - это просто провайдер OIDC "сделай сам" (вам нужно реализовать гораздо больше, чем у конкурентов). Его использование не меняет способ настройки серверов ресурсов или клиентов. Основной файл Readme, на который я ссылался выше, пытается прояснить потоки OAuth2 и обязанности участников. Какой учебник читать после этого, действительно зависит от вашего варианта использования.
Думаю, мой вопрос немного отличался от вашего ответа. Вы можете добавить внешних провайдеров на spring-authorization-server для федерации, но я не уверен, могут ли они быть пользовательскими или они должны быть такими, как google и github.
Если бы вы могли уточнить свой вариант использования, в частности, что вы подразумеваете под «подключением к существующему серверу OIDC, предоставленному моим предприятием», это было бы полезно для предоставления конкретного ответа. Может помочь указание на то, что «сервер OIDC» по определению является сервером авторизации, поэтому вам технически не нужно вводить сервер авторизации для подключения к другому серверу. Однако вы можете сделать это, если ваш вариант использования требует этого.
Я думаю, что каждый серьезный поставщик OIDC на рынке предлагает федерацию удостоверений с другими поставщиками OIDC (не только Google или Github). Spring Authorization Server не отличается от тех, которые я настроил в своих руководствах по этому вопросу (я мог выбрать любой из 3 для объединения удостоверений из 2 других вместо использования 3 в качестве OP 1-го уровня).
@ch4mp понял, но я искал примеры, когда spring-authorization-server использует для федерации собственного провайдера oidc, а не использует google и/или github в качестве одного из других провайдеров. Я читал в нескольких местах, что это возможно, но примеров либо нет, либо я их пропустил.
если вам просто нужно использовать существующий сервер OIDC, предоставленный предприятием, вам не нужно использовать spring-authorization-server.
Все, что вам нужно, это просто подключить клиент oauth2.
например, если вы используете springboot, вам просто нужно добавить spring-boot-starter-oauth2-client в зависимости, а затем настроить spring:security:oauth2:client:registration и spring:security:oauth2:client:provider. поэтому фреймворк может разрешить информацию о пользователе и сохранить ее в своем контексте.
вы можете обратиться к этому, https://www.baeldung.com/spring-security-openid-connect
Спасибо за добавление, хотя я уже понимаю, что могу использовать Spring Security oauth2 для прямого подключения к существующему провайдеру. К сожалению, это не ответ на мой вопрос. Я хочу знать, как использовать настраиваемый провайдер как часть федеративной авторизации, аналогичной использованию github или google.
я не могу понять, зачем вам нужен spring-authorization-server. Как правило, если ваш сервер OIDC предоставляется вашим предприятием, то вся конфигурация провайдера oauth2 (возможно, включая github, google, facebook) и соответствующая федерация уже должны поддерживаться на этом сервере.
на ваш вопрос мой ответ не подходит, если только вам не нужно подключать много провайдеров oidc и объединять их и настраивать поток аутентификации.
Корпоративный сервер OIDC не занимается объединением всего, что нужно всем клиентским приложениям. Отдельные проекты имеют свои собственные проблемы, которые могут расширять (или изменять) то, что предоставляет центральный сервер. Я также попытался объяснить ситуацию в редактировании моего поста — если я могу изолировать необходимые мне изменения между средами развертывания для одной конкретной службы, это намного проще поддерживать.
Вы действительно можете подключиться к любому провайдеру OIDC через Spring Authorization Server. Фактически, изложенный вами вариант использования является прекрасным примером того, для чего предназначен SAS. Конечно, с любой архитектурой есть компромиссы, и, как правило, команда Spring не будет давать конкретных рекомендаций по вашей архитектуре (за исключением рекомендаций архитектур, повышающих безопасность, таких как BFF). Это может быть одной из причин, по которой вы обнаружите, что этот конкретный пример отсутствует.
Другая причина, по которой некоторые примеры могут отсутствовать, заключается в том, что детали настройки вашего конкретного провайдера OIDC вместо общего провайдера требуют знаний, которые есть только у вас. В этих случаях вы хотите начать с предоставленного примера и начать его адаптацию, используя справочную документацию для OAuth2 в качестве руководства. Может быть полезно знать, что вы должны думать о Spring Authorization Server как о клиенте OAuth2 (логин) для целей настройки вышестоящего провайдера.
См., например, Настройка свойств пользовательского поставщика . Если вы работаете с провайдером OpenID Connect 1.0, соответствующим спецификации, вам нужно только предоставить необходимые свойства для вашего вышестоящего провайдера в каждой среде (например, примеры клиентов в руководствах ch4mp, ссылки на которые приведены в комментариях) и Spring Остальное сделает служба безопасности. Обратите внимание, что во многих случаях вам нужно указать только issuer-uri
для вашего провайдера, и он предоставит другие свойства (через ответ конфигурации провайдера OpenID Connect 1.0 конечной точки ${issuer-uri}/.well-known/openid-configuration
вашего провайдера).
Как вы можете (надеюсь) видеть, Spring Security обрабатывает все потребности аутентификации за вас. Если кажется, что демонстрация этого в контексте Spring Authorization Server отсутствует, это потому, что это ничем не отличается от настройки обычного примера входа/клиента OAuth2.
Моя конкретная рекомендация — начать с Как выполнить аутентификацию с помощью входа через социальные сети и заменить Google/GitHub вашим провайдером, используя только свойства. Как упоминалось ранее, у вас возникнут проблемы только в том случае, если ваш провайдер не соответствует спецификации и требует настройки. Здесь поможет внимательное прочтение справочной документации и не стесняйтесь задавать дополнительные (более конкретные) вопросы по этому поводу.
Спасибо вам за это. Я начал подозревать, что не требуется использовать один из социальных провайдеров, поэтому я начал добавлять конфигурацию для провайдера, который предлагает мое предприятие. У меня еще не было возможности проверить это, но ваш ответ - именно то, что я искал. Еще раз спасибо!
Может быть, вы найдете какую-то ценность в моих уроках по OAuth2 с Spring