За 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. Меньше поверхность — меньше способов ошибиться в конфигурации.