Документация/Настройка SSO/Настройка SAML 2.0

Настройка SAML 2.0

Настройте единый вход с использованием SAML 2.0 для поставщиков идентификации, поддерживающих протокол SAML. Это руководство охватывает общую настройку SAML, применимую к любому совместимому IdP.

Предварительные условия

  • SAML 2.0 совместимый поставщик идентификации (Okta, Azure AD, OneLogin, PingFederate и т.д.)
  • Admin-доступ к Вашему поставщику идентификации для создания и настройки приложений
  • Учётная запись Администратора организации SecureCodingHub

Детали поставщика услуг

Эти значения нужны при настройке SecureCodingHub в Вашем поставщике идентификации:

НастройкаЗначение
SP Entity IDhttps://api.limeplate.com
ACS URL (Assertion Consumer Service)https://api.limeplate.com/api/sch/auth/sso/callback/saml
SP Metadata URLhttps://api.limeplate.com/api/sch/auth/sso/metadata
Формат Name IDurn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
BindingHTTP-POST

Шаг 1 — Настройте Вашего поставщика идентификации

1
Создайте новое SAML-приложение
В admin-консоли Вашего поставщика идентификации создайте новое приложение SAML 2.0 для SecureCodingHub.
2
Установите ACS URL и Entity ID
Скопируйте ACS URL и SP Entity ID из таблицы Деталей поставщика услуг выше в конфигурацию приложения Вашего IdP.
3
Настройте сопоставление атрибутов
Сопоставьте обязательный атрибут email как NameID. Опционально сопоставьте атрибуты firstName и lastName для автоматического заполнения профиля.
4
Скачайте или скопируйте URL метаданных IdP
Вам понадобится URL метаданных Вашего IdP (или подписывающий сертификат) на следующем шаге при настройке SecureCodingHub.

Шаг 2 — Настройте SAML в SecureCodingHub

1
Откройте Настройки SSO
Войдите как Администратор организации и перейдите в Настройки SSO из боковой панели.
2
Выберите протокол SAML
Выберите SAML как SSO-протокол из выпадающего списка.
3
Введите URL метаданных IdP
Вставьте URL метаданных Вашего поставщика идентификации. Это позволяет SecureCodingHub автоматически обнаруживать эндпоинты и сертификаты.
4
Добавьте подписывающий сертификат (опционально)
Если Ваш IdP не выставляет URL метаданных, вставьте подписывающий сертификат IdP напрямую.
5
Включите SSO и сохраните
Переключите SSO в положение «включено» и нажмите Сохранить для активации SAML-аутентификации для Вашей организации.
app.securecodinghub.com/organization/sso
Единый вход
Аутентифицируйте учащихся через Вашего поставщика идентификации.
OIDC
OpenID Connect — рекомендуется
SAML
Федерация SAML 2.0
https://api.limeplate.com/api/sch/auth/sso/saml/{orgId}
https://idp.example.com/app/saml2/sso/metadata
-----BEGIN CERTIFICATE----- MIICmzCCAYMCBgF8... ... -----END CERTIFICATE-----
SSO включён

Шаг 3 — Протестируйте

1
Откройте окно incognito
Используйте private/incognito окно браузера, чтобы избежать конфликтов сессий с Вашей admin-учётной записью.
2
Перейдите на страницу входа SSO
Перейдите на app.securecodinghub.com и нажмите Войти с SSO.
3
Введите Ваш корпоративный email
Система обнаружит конфигурацию SSO Вашей организации и перенаправит Вас к Вашему IdP.
4
Аутентифицируйтесь в Вашем IdP
Завершите поток входа у Вашего поставщика идентификации. Вы должны быть перенаправлены обратно в SecureCodingHub и автоматически вошедшим.

Сопоставление атрибутов

SecureCodingHub читает следующие атрибуты из SAML-утверждения:

SAML-атрибутПоле SecureCodingHubОбязательное
NameID (формат email)EmailДа
givenName (…/claims/givenname)Имя (первая часть — конкатенируется с фамилией в единое отображаемое имя)Нет
surname (…/claims/surname)Имя (вторая часть — соединяется с givenName во время провижининга)Нет
Истечение сертификата: SAML-сертификаты истекают. Установите напоминание в календаре, чтобы ротировать Ваш сертификат до истечения и избежать перебоев входа.

Чтение SAML-ответа в реальной жизни

Когда SAML отказывает, самый быстрый путь к диагнозу — это инспектировать фактический SAML-ответ, а не симптом в браузере. Установите расширение браузера SAML tracer, воспроизведите неудачный вход и посмотрите на POST, который IdP отправляет на ACS URL. Три поля говорят Вам почти всё. Элемент Issuer должен соответствовать entityID, опубликованному в Ваших метаданных IdP. Элемент Audience, вложенный внутри Conditions, должен соответствовать SP Entity ID, настроенному в SecureCodingHub. Subject NameID должен быть email-адресом пользователя в указанном Вами формате.

Помимо этих полей, проверьте идентификатор InResponseTo, если Ваш IdP его поддерживает, подтвердите, что ответ подписан (элемент ds:Signature присутствует), и проверьте, что временные метки NotBefore и NotOnOrAfter согласуются с текущими часами. Значительная разница часов между IdP и SP вызывает тихий отказ от иначе валидных утверждений. Если ответ выглядит правильно сформированным, но утверждение всё ещё отклоняется, скопируйте base64-кодированное значение SAMLResponse из tracer и декодируйте его офлайн. Чтение сырого XML против спецификации SAML 2.0 — самый надёжный способ найти отсутствующий атрибут или неправильно настроенное утверждение.

Когда просить помощи у команды IdP vs команды SP

Большинство тикетов поддержки SAML можно отсортировать менее чем за минуту, если Вы знаете, на какой стороне федерации живёт ошибка. Как правило, несоответствия audience и issuer — это проблемы на стороне SP: конфигурация SecureCodingHub ожидает значения, которые IdP не производит, или она была настроена против другого SP entity ID, чем тот, под которым IdP подписывает. Они решаются регулировкой настроек SSO SecureCodingHub или SP Entity ID и ACS URL в конфигурации приложения IdP. Обратитесь к стороне SecureCodingHub в первую очередь.

Проблемы сопоставления claim и атрибутов обычно на стороне IdP. Если пользователи приземляются в SecureCodingHub с отсутствующими именами, неправильными email-адресами или неожиданными назначениями ролей, IdP эмитирует атрибуты, которые SP не может потребить. Admin IdP должен добавить или переименовать claims в конфигурации приложения. Сбои сертификатов и подписей разделены: если сертификат IdP истёк или был ротирован, это исправление на стороне IdP. Если SecureCodingHub перестал доверять ранее валидной подписи, метаданные или сертификат, хранимые на стороне SP, устарели и нуждаются в обновлении. Когда есть сомнения, захватите вывод SAML tracer и поделитесь им с обеими командами; сам ответ показывает, на чьей стороне следующий шаг. См. Обзор SSO для руководства по выбору протокола.

SAML 2.0: часто задаваемые вопросы

Что на самом деле означает «федеративный SAML»?

Федеративный SAML относится к доверительным отношениям, установленным между поставщиком идентификации (IdP) и поставщиком услуг (SP), так что пользователь может аутентифицироваться один раз в IdP и иметь это утверждение принятым SP. Федерация — это подписанный XML-контракт: каждая сторона доверяет метаданным и подписывающему сертификату другой. SecureCodingHub становится частью Вашей федерации, как только Вы загрузите метаданные IdP, а IdP узнает SP entity ID.

Как ротировать SAML-сертификат, не сломав входы?

Ротация SAML-сертификата лучше всего выполняется с коротким окном перекрытия. Если Ваш IdP поддерживает публикацию нескольких подписывающих сертификатов в метаданных, добавьте новый сертификат до удаления старого, и заставьте SecureCodingHub повторно получить метаданные IdP, чтобы оба сертификата были доверенными во время перехода. После того, как IdP начнёт подписывать новым ключом, мониторьте входы в течение дня, затем удалите старый сертификат из метаданных. Самый распространённый продакшен-отказ — ротация без перекрытия, в пятницу.

SAML vs OAuth vs OpenID Connect — какой выбрать?

Когда команды сравнивают SAML vs OAuth vs OpenID Connect, практический ответ — следовать операционной совместимости. SAML 2.0 — это зрелый XML-стандарт федерации, доминирующий в корпоративных IdP, таких как ADFS и PingFederate. OAuth 2.0 один — это фреймворк авторизации, а не аутентификация. OpenID Connect добавляет идентификацию поверх OAuth 2.0 и является современным выбором по умолчанию для Azure AD и Okta. И SAML, и OIDC дадут Вам эквивалентную безопасность SSO с SecureCodingHub.

Как декодировать SAML-ответ для устранения сбоя?

Чтобы декодировать SAML-ответ, захватите base64-кодированный параметр SAMLResponse, который IdP отправляет на ACS URL — расширение браузера SAML tracer — самый лёгкий способ его захватить. Base64-декодируйте значение в сырой XML и инспектируйте Issuer, Audience, NameID и временные метки. Большинство сбоев разрешаются, как только Вы сравните эти четыре поля со значениями, настроенными в настройках SSO SecureCodingHub и конфигурации приложения Вашего IdP.