Является ли spring-authorization-server подходящим инструментом для подключения к существующему серверу OIDC, предоставленному предприятием?

Подходит ли 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 хотел бы показать в своих примерах, но это явно отсутствует. Это заставляет меня думать, что он не предназначен для того, чтобы делать то, что я хочу, но я надеюсь, что я просто что-то упускаю.

Может быть, вы найдете какую-то ценность в моих уроках по OAuth2 с Spring

ch4mp 22.05.2023 07:35

@ch4mp Спасибо. Я взгляну. Не могли бы вы привести меня к конкретному примеру?

Steve Storck 22.05.2023 13:05

Я вижу, что вы используете 3 провайдера аутентификации, но вы не включили spring-authorization-server в свои примеры.

Steve Storck 22.05.2023 13:11

Сервер авторизации Spring - это просто провайдер OIDC "сделай сам" (вам нужно реализовать гораздо больше, чем у конкурентов). Его использование не меняет способ настройки серверов ресурсов или клиентов. Основной файл Readme, на который я ссылался выше, пытается прояснить потоки OAuth2 и обязанности участников. Какой учебник читать после этого, действительно зависит от вашего варианта использования.

ch4mp 22.05.2023 17:31

Думаю, мой вопрос немного отличался от вашего ответа. Вы можете добавить внешних провайдеров на spring-authorization-server для федерации, но я не уверен, могут ли они быть пользовательскими или они должны быть такими, как google и github.

Steve Storck 22.05.2023 18:14

Если бы вы могли уточнить свой вариант использования, в частности, что вы подразумеваете под «подключением к существующему серверу OIDC, предоставленному моим предприятием», это было бы полезно для предоставления конкретного ответа. Может помочь указание на то, что «сервер OIDC» по определению является сервером авторизации, поэтому вам технически не нужно вводить сервер авторизации для подключения к другому серверу. Однако вы можете сделать это, если ваш вариант использования требует этого.

Steve Riesenberg 22.05.2023 18:27

Я думаю, что каждый серьезный поставщик OIDC на рынке предлагает федерацию удостоверений с другими поставщиками OIDC (не только Google или Github). Spring Authorization Server не отличается от тех, которые я настроил в своих руководствах по этому вопросу (я мог выбрать любой из 3 для объединения удостоверений из 2 других вместо использования 3 в качестве OP 1-го уровня).

ch4mp 22.05.2023 18:59

@ch4mp понял, но я искал примеры, когда spring-authorization-server использует для федерации собственного провайдера oidc, а не использует google и/или github в качестве одного из других провайдеров. Я читал в нескольких местах, что это возможно, но примеров либо нет, либо я их пропустил.

Steve Storck 24.05.2023 11:54
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
8
80
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

если вам просто нужно использовать существующий сервер 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.

Steve Storck 25.05.2023 21:54

я не могу понять, зачем вам нужен spring-authorization-server. Как правило, если ваш сервер OIDC предоставляется вашим предприятием, то вся конфигурация провайдера oauth2 (возможно, включая github, google, facebook) и соответствующая федерация уже должны поддерживаться на этом сервере.

smileis2333 26.05.2023 04:26

на ваш вопрос мой ответ не подходит, если только вам не нужно подключать много провайдеров oidc и объединять их и настраивать поток аутентификации.

smileis2333 26.05.2023 04:41

Корпоративный сервер OIDC не занимается объединением всего, что нужно всем клиентским приложениям. Отдельные проекты имеют свои собственные проблемы, которые могут расширять (или изменять) то, что предоставляет центральный сервер. Я также попытался объяснить ситуацию в редактировании моего поста — если я могу изолировать необходимые мне изменения между средами развертывания для одной конкретной службы, это намного проще поддерживать.

Steve Storck 26.05.2023 13:44
Ответ принят как подходящий

Вы действительно можете подключиться к любому провайдеру 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 вашим провайдером, используя только свойства. Как упоминалось ранее, у вас возникнут проблемы только в том случае, если ваш провайдер не соответствует спецификации и требует настройки. Здесь поможет внимательное прочтение справочной документации и не стесняйтесь задавать дополнительные (более конкретные) вопросы по этому поводу.

Спасибо вам за это. Я начал подозревать, что не требуется использовать один из социальных провайдеров, поэтому я начал добавлять конфигурацию для провайдера, который предлагает мое предприятие. У меня еще не было возможности проверить это, но ваш ответ - именно то, что я искал. Еще раз спасибо!

Steve Storck 31.05.2023 13:42

Другие вопросы по теме

Аутентификация с использованием потока кода авторизации OAuth 2.0 с платформой Microsoft Identity Platform (Azure AD) и @azure/msal-node в серверной части Node.js
API Microsoft Graph — возможно ли отправить сообщение чата с использованием потока учетных данных клиента?
Сервер авторизации с Rails 7, Devise и Doorkeeper
Настройте токен JWT, чтобы добавить идентификатор пользователя на сервер авторизации Spring 1.0.0
Управление API Azure — проблема с авторизацией учетных данных клиента OAuth2.0
Я получаю сообщение об ошибке неподдерживаемого типа носителя при выполнении запроса на отдых с использованием oauth
Google Colab — redirect_url для API Google Диска — OAuth 2.0
Почему я получаю несколько запросов авторизации от скрипта приложений Google Sheets
Могут ли разрешения потока учетных данных клиента Azure AD OAuth быть ограничены определенными почтовыми ящиками?
Ошибка: неверный запрос: значение, переданное для кода авторизации, было недопустимым