Настройка SAML 2.0
Настройте единый вход с использованием SAML 2.0 для поставщиков идентификации, поддерживающих протокол SAML. Это руководство охватывает общую настройку SAML, применимую к любому совместимому IdP.
Предварительные условия
- SAML 2.0 совместимый поставщик идентификации (Okta, Azure AD, OneLogin, PingFederate и т.д.)
- Admin-доступ к Вашему поставщику идентификации для создания и настройки приложений
- Учётная запись Администратора организации SecureCodingHub
Детали поставщика услуг
Эти значения нужны при настройке SecureCodingHub в Вашем поставщике идентификации:
| Настройка | Значение |
|---|---|
| SP Entity ID | https://api.limeplate.com |
| ACS URL (Assertion Consumer Service) | https://api.limeplate.com/api/sch/auth/sso/callback/saml |
| SP Metadata URL | https://api.limeplate.com/api/sch/auth/sso/metadata |
| Формат Name ID | urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress |
| Binding | HTTP-POST |
Шаг 1 — Настройте Вашего поставщика идентификации
Шаг 2 — Настройте SAML в SecureCodingHub
Шаг 3 — Протестируйте
Сопоставление атрибутов
SecureCodingHub читает следующие атрибуты из SAML-утверждения:
| SAML-атрибут | Поле SecureCodingHub | Обязательное |
|---|---|---|
NameID (формат email) | Да | |
givenName (…/claims/givenname) | Имя (первая часть — конкатенируется с фамилией в единое отображаемое имя) | Нет |
surname (…/claims/surname) | Имя (вторая часть — соединяется с givenName во время провижининга) | Нет |
Чтение 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.