Skip to main content

Как работает SAML 2.0 — основы для инженера Принтум

Как работает SAML 2.0 — основы для инженера Принтум

Назначение

SAML 2.0 (Security Assertion Markup Language) — стандарт обмена данными аутентификации и авторизации между IdP и SP на основе XML (OASIS, 2005).

Основные роли

Роль Описание Пример
IdP (Identity Provider) Аутентифицирует пользователя и выдаёт assertions ADFS, Keycloak, Okta, Azure AD
SP (Service Provider) Принимает assertions и предоставляет доступ Принтум, веб-приложение
Пользователь (User Agent) Браузер, который перенаправляется между IdP и SP Браузер пользователя

Типы assertions

Тип Содержимое
Authentication assertion Кто пользователь, когда и как аутентифицирован
Attribute assertion Атрибуты пользователя (email, группы, роль)
Authorization assertion Права доступа (используется редко)

SP-initiated flow (наиболее распространён)

1. Пользователь  →  SP:    обращается к защищённому ресурсу
2. SP            →  Браузер: HTTP 302, AuthnRequest (SAML Request)
3. Браузер       →  IdP:   перенаправление с AuthnRequest
4. IdP           →  Пользователь: форма входа (если нет сессии)
5. IdP           →  Браузер: HTTP 200 + форма с SAML Response (POST binding)
6. Браузер       →  SP:    POST с SAML Response (assertion)
7. SP            →  Пользователь: доступ разрешён

Bindings

Binding Механизм передачи
HTTP Redirect AuthnRequest передаётся в URL (GET), подписывается query string
HTTP POST Response передаётся в теле формы (Base64-encoded XML)
HTTP Artifact Ссылка на assertion; SP забирает напрямую у IdP

Безопасность

  • Assertions подписываются IdP с помощью X.509-сертификата.
  • SP проверяет подпись перед обработкой.
  • Assertion содержит NotBefore и NotOnOrAfter — временное окно действия.
  • Для защиты от replay-атак используется InResponseTo и однократное использование assertion ID.

Связь с SSO в Принтум

Принтум (в роли SP) может принять аутентификацию от корпоративного IdP по SAML 2.0. Пользователь, уже вошедший в корпоративный IdP, получает доступ к Личному кабинету без ввода пароля.

TODO: уточнить — какие атрибуты assertion Принтум использует для сопоставления пользователя (NameID, email, UPN).