Как интегрировать Spring Security с SAML2 ADFS для реализации единого входа в систему?
Как интегрировать Spring Security с SAML2 ADFS для реализации единого входа в систему?

Принципы входа в систему SAML

Прежде чем начать обучение, вы должны сначала понять концепцию SAML. SAML в основном имеет три идентификатора: пользователь/браузер, поставщик услуг и поставщик удостоверений.

  • «Поставщик удостоверений» и «заявляющая сторона» — синонимы.,существоватьADFS,ОКта обычно называется МВУ,А существующие Spring их часто обозначают сокращенно AP. Короче говоря, пользователя необходимо перенаправить на IDP, чтобы войти в систему.,Чтобы обойти Служить провайдера,Не позволяйте поставщикам Служить получать конфиденциальную информацию пользователей.
  • «Служить провайдера» и «Проверяющая сторона» также являются синонимами.,существоватьADFS,ОКта обычно называется СП,А существуют Spring обычно называют RP.

IDP (поставщик удостоверений) Поставщик удостоверений Объяснение: IDP отвечает за проверку личности пользователя и создание утверждений безопасности, содержащих информацию о личности пользователя. В SAML IDP обычно предоставляется организацией или поставщиком услуг и используется для аутентификации пользователя. Поставщик атрибутов AP (Attribute Provider), по сути эквивалентный IDP. Объяснение: AP — это объект, предоставляющий информацию об атрибутах пользователя. В SAML эта атрибутивная информация может включать имя пользователя, адрес электронной почты, роль и т. д. Точка доступа обычно отделена от IDP, чтобы информацией об атрибутах мог управлять выделенный объект. SP (Поставщик услуг) Объяснение поставщика услуг: SP — это объект, который полагается на утверждения SAML для авторизации пользователей. SP может быть веб-приложением, службой или ресурсом, который использует утверждения, сгенерированные IDP, чтобы определить, имеет ли пользователь разрешение на доступ к защищенному ресурсу. RP (проверяющая сторона) Синонимы проверяющей стороны SP Объяснение: RP относится к объекту, который полагается на утверждения SAML для принятия или отклонения запросов доступа пользователей. RP может быть синонимом SP, указывая на то, что он полагается на утверждения, генерируемые IDP, для авторизации пользователя.

Давайте сначала посмотрим, как работает аутентификация проверяющей стороны SAML 2.0 в Spring Security. Во-первых, мы видим, что, как и при входе в систему OAuth 2.0, Spring Security передает пользователя третьей стороне для аутентификации. Это делается посредством серии перенаправлений.

Процесс входа в ADFS

Вышеописанное описано в официальной документации Spring.,Пожалуйста, обратитесь к:SAML 2.0 Login Overview


Говоря простым языком, если вы хотите пойти на концерт Джеки Ченга (СП), вы инсайдер и идете напрямую, а охранник (Спринг Охрана) вас не впустит! Охранник сказал, что у вас нет сертификатов авторизации (авторитетов), и сказал вам, куда писать сертификаты, и дал вам рекомендательное письмо (AuthRequest). Вы отнесли рекомендательное письмо проверяющей стороне (IDP) и предоставили. ваш идентификатор и пароль, проверяющая сторона увидела ваше рекомендательное письмо, проверила формат и обнаружила, что печать подлинная, а пароль удостоверения личности также подлинный, поэтому они выписали вам сертификат и попросили вас взять его с собой на место. С этим сертификатом на концерт (СП) Вы сможете пользоваться услугами внутри столько, сколько пожелаете.

Фактическая конфигурация

Цель первой конфигурации — настроить SP (ваше приложение Spring) и IDP (ADFS/AzureAD/Okta) для настройки доверия, поэтому SP необходимо настроить sp Metadata.xml, чтобы предоставить IDP импортированное доверие, а затем IDP необходимо предоставляет метаданные IDP. XML-файл предоставляется поставщику услуг для ознакомления. Поставщик услуг предоставляет свои собственные метаданные sp при доступе. После того, как IDP проверит его и обнаружит, что он заслуживает доверия, он позволяет вам войти в систему и перенаправляет на ссылку, которую вы настроили позже. успех.

Конфигурация стороны IDP

1. ADFS

  1. Получить XML метаданных федерации

существовать AD FS В приложении администратора найдите метаданные федерации. xml документ. щелкнуть AD FS > Служить > конечная точка, затем находится в разделе «Метаданные» URL Эту информацию можно найти по пути。Этот путь обычно/FederationMetadata/2007-06/FederationMetadata.xml , как показано ниже:

Добавьте комментарий к изображению, не более 140 слов (по желанию)

Добавьте комментарий к изображению, не более 140 слов (по желанию)

Чтобы загрузить файл метаданных, вы обычно можете загрузить его через браузер на существующем Служить URL чтобы найти файл. Например: https://<ваше имя хоста>/FederationMetadata/2007-06/FederationMetadata.xml Загрузите этот файл и сохраните его на свой компьютер.

Необязательный,Вы можете напрямую скопировать этот URL,существовать Следовать заSpring app Прямой импорт

Добавьте комментарий к изображению, не более 140 слов (по желанию)

2. Создайте доверенную сторону

Создайте свой Служить в качестве проверяющей стороны (с помощью Spring Конфигурация как пример)

Добавьте комментарий к изображению, не более 140 слов (по желанию)

Импортируйте метаданные вашего процесса

Импортируйте метаданные sp, ранее экспортированные из Spring, выполнив мастер доверия проверяющей стороны, как показано в следующих шагах:

Добавьте комментарий к изображению, не более 140 слов (по желанию)

существуют Если публичная сеть доступна, выберите первый вариант,Обновления — это просто,В противном случае выберите второй вариант, чтобы импортировать его самостоятельно.,Поскольку требование должно быть ссылкой https,Или настройте локальную сеть https

Добавьте комментарий к изображению, не более 140 слов (по желанию)

Введите отображаемое имя

Добавьте комментарий к изображению, не более 140 слов (по желанию)

Выберите политику контроля доступа

Добавьте комментарий к изображению, не более 140 слов (по желанию)

Добавьте комментарий к изображению, не более 140 слов (по желанию)

Просто завершите этот шаг.

Но есть еще один недостающий шаг. ADFS требует настройки полей для распространения. В противном случае после входа в систему вы обнаружите ошибку. Вы можете попробовать это самостоятельно. Далее идут свойства конфигурации

Создание правила политики выпуска утверждений

Для сопоставления атрибутов между AD FS и приложением,Вам необходимо создать политику публикации претензий.,Что будетАтрибуты LDAP, отправленные как утверждения,и будет LDAP атрибуты сопоставляются с SpringApp свойство.

Добавьте комментарий к изображению, не более 140 слов (по желанию)

Добавить правила

Выберите тип правила

Объявить сопоставление имен правил

ВАЖНО: Убедитесь, что По крайней мере один атрибут («NameID») настроен на использование точного написания, показанного выше.

Настройка ADFS завершена.

2. Azure AD (теперь Microsoft Entra ID)

Зарегистрируйте свой идентификатор Microsoft Entra, нажмите «Применить», чтобы зарегистрироваться, и зарегистрируйте программу.

Добавьте комментарий к изображению, не более 140 слов (по желанию)

Настройте URI перенаправления. Здесь мы сначала научимся использовать http://localhost:8080/saml/SSO. Обратите внимание, что для приведенной выше конфигурации ADFS требуется протокол https. что локальная сеть использует nginx или хост для настройки https локальной сети.

URI перенаправления для Azure AD

Получите метаданные idp, откройте конечную точку, конечная точка входа в систему Saml:

конечная точка

Конфигурация ИП

1. Минимальная зависимость SAML 2.0Служить Поддержка провайдерасуществовать spring-security-saml2-service-provider середина。он строитсуществоватьOpenSAMLна базе библиотеки。

2. Минимальная конфигурация

существоватьиспользовать Spring Boot При преобразовании приложения Конфигурация для провайдера Служить состоит из двух основных шагов.

  1. Добавьте необходимые зависимости.
  2. Укажите необходимые метаданные стороны утверждения. а. При добавлении зависимостей, поскольку в последнем зеркальном хранилище maven нет версии opensaml-core:4.x.x, а в shibboleth.net она есть, вам необходимо указать зеркальное хранилище при добавлении зависимостей.
Язык кода:javascript
копировать
repositories {
 mavenCentral()
 maven { url "https://repo.spring.io/milestone" }
 maven { url "https://repo.spring.io/snapshot" }
 maven { url "https://build.shibboleth.net/nexus/content/repositories/releases/" }
}

б. Добавьте необходимый минимум зависимостей.

Язык кода:javascript
копировать
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.security:spring-security-saml2-service-provider'
    implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'

    testImplementation 'net.sourceforge.htmlunit:htmlunit:2.70.0'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.security:spring-security-test'
}

c. Укажите метаданные поставщика удостоверений (поставщика удостоверений).

существоватьSpring В загрузочном приложении, чтобы указать метаданные поставщика удостоверений, создайте конфигурацию, аналогичную следующей.

Язык кода:javascript
копировать
spring:
  security:
    filter:
      dispatcher-types: async, error, request, forward
    saml2:
      relyingparty:
        registration:
          metadata:
            entity-id: "{baseUrl}/saml2/service-provider-metadata/one"
            singlelogout:
              binding: POST
              url: "{baseUrl}/saml/logout"
              responseUrl: "{baseUrl}/saml/SingleLogout"
            acs:
              location: "{baseUrl}/saml/SSO"
            assertingparty:
              metadata-uri: https://login.microsoftonline.com/603e9946-79fd-42bc-bae2-2abda19cb695/saml2

в:

  • entity-id находится в ответе SAML, отправленном поставщиком удостоверений Issuer Значение, содержащееся в атрибуте «существуетadfs», — это ваш уникальный идентификатор, эквивалентный идентификатору проверяющей стороны. <EntityDescriptor EntityID="..."/> значение, найденное в . Значение может содержать несколько заполнителей. Это базовый URL 、 registrationId 、 baseScheme 、 baseHostиbasePort
  • singlelogout.url isSingleLogoutService Положение эквивалентно положению доверяющей стороны. <SPSSODescriptor> в <SingleLogoutService Location="..."/> значение, найденное в . .
  • acs.location — AssertionConsumerService Расположение. Эквивалент проверяющей стороны <SPSSODescriptor> в <AssertionConsumerService Location="..."/> Значение, найденное в разделе Значение, может содержать несколько заполнителей. Это базовый URL 、 registrationId 、 baseScheme 、 baseHostиbasePort 。
  • Assertingparty.metadata-uri — это путь к классам или местоположение на основе файла или конечная точка HTTP файла метаданных утверждающей стороны.

вот и все! Минимальная настройка завершена! Конечно, вы все равно можете настроить контроллер или HTML для приема пользовательских данных после успешного входа в систему. Подробности см. в исходном коде, которым я поделюсь позже.

После запуска программы доступhttp://localhost:8080 Вы сможете войти в систему. Интерфейс входа выглядит следующим образом.

Добавьте комментарий к изображению, не более 140 слов (по желанию)

После ввода пароля учетной записи интерфейс успешного входа в систему выглядит следующим образом:

Добавьте комментарий к изображению, не более 140 слов (по желанию)

Ссылка на этот пример:https://github.com/Kahen/spring-security-saml2-azure-ad-example

Справочные ссылки:

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose