← Ко всем записям

SAML

SAML 2.0 в ~600 строках Go: что оставили, что убрали

12 мин

Прогон по SAML-реализации Auth Fly: разбор AuthnRequest, ACS, фиксированный в конфиге SP, XMLDSig с SHA-256 и RS256 — и список усилений, ещё лежащий на полосе.

За SAML закрепилась репутация тяжёлого протокола. Ядро флоу для IdP получается компактным, как только провести жёсткую границу того, что именно в scope.

Что делает IdP

  • Отдаёт /metadata как IdP metadata XML.
  • Принимает AuthnRequest на /sso через HTTP-Redirect binding.
  • Постит подписанный SAML Response на ACS SP в /sso/complete.

Сильные дефолты, уже на месте

  • ACS — из конфига SP. Response уходит на ACS URL, хранящийся в allowlist SP, никогда — на URL из входящего запроса. Это закрывает атаки подменой ACS.
  • Поиск SP по allowlist. Неизвестные значения Issuer отклоняются до любой дальнейшей обработки.
  • Подписанные assertion-ы. XMLDSig с SHA-256 digest и RS256 подписью, enveloped-signature transform, exclusive canonicalization.
  • Обязательные элементы. AudienceRestriction, SubjectConfirmation, NotOnOrAfter — всё заполняется из конфига SP.

Что в pre-flight чек-листе

  • Валидировать Destination, если он присутствует в AuthnRequest.
  • Отклонять AuthnRequest со старым IssueInstant.
  • Анти-replay кеш для ID-шников AuthnRequest.
  • Опциональная проверка подписанных AuthnRequest, когда SP это включает.

Что мы намеренно не строим

SAML-профили, которые нам не нужны: ECP, attribute query, artifact binding. Меньше поверхность — меньше способов ошибиться в конфигурации.


Логотип Auth Fly

Auth Fly

Открытый конструктор аутентификации

Об Auth Fly