Если вы читаете эту статью, значит, вы управляете идентификационными данными пользователей за пределами AWS и используете Identity Provider (IdP) Federation для предоставления этим внешним идентификационным данным разрешения на использование ресурсов AWS в вашей учетной записи.
В этом процессе аутентификации одной из наиболее распространенных ошибок, с которой вам, возможно, придется столкнуться, является “response did not contain a valid saml assertion”, и в этой статье я хочу поделиться с вами некоторыми советами по устранению неполадок, чтобы решить эту проблему.
Оглавление
Расследование проблемы "В ответе SAML не найдено действительное утверждение
Проверка имени атрибута и значения атрибута на вашем IdP
Если вы работаете на AWS (но в целом), недействительное утверждение SAML в основном возникает, когда в SAML-ответе от IdP отсутствует атрибут с именем Name, установленным в https://aws.amazon.com/SAML/Attributes/Role . Атрибут также должен содержать один или несколько элементов AttributeValue, каждый из которых содержит эти две строки, разделенные запятой:
- ARN роли, с которой может быть сопоставлен пользователь.
- ARN провайдера SAML.
Например:
<Attribute Name="<https://aws.amazon.com/SAML/Attributes/Role>">
<AttributeValue>arn:aws:iam::account-number:role/role-name1,arn:aws:iam::account-number:saml-provider/provider-name</AttributeValue>
</Attribute>
Здесь также приведен пример разрешения для Okta.
Проблемы синхронизации времени между IdP и поставщиком услуг
https://docs.pulsesecure.net/WebHelp/Content/PCS/PCS_AdminGuide_8.2/Investigating a No valid assertion.htm
Если часы SAML IdP и поставщика услуг SAML (например, AWS) не синхронизированы, утверждение может быть признано недействительным, и аутентификация не пройдет.
Возможное решение - проверить, что ваш IdP и поставщик услуг могут использовать один и тот же NTP-сервер, или доказать, что часы вашего сервера актуальны.
Несоответствие Metadata.xml
Обновление данных и модернизация могут привести к тому, что сертификаты перестанут доверять одной стороне процесса федерации или другой. Попробуйте проверить и обновить metadata.xml с обеих сторон, чтобы сертификаты снова совпадали.
Сообщение SAML неправильно отформатировано, содержит недостающие или недопустимые элементы
https://stackoverflow.com/questions/64158310/aws-sso-your-request-included-an-invalid-saml-response
Иногда ошибка возникает не только с атрибутом User, но и в целом, если сообщение должно содержать всю необходимую информацию в требуемом формате. Например:
- Сообщение было подписано, но подпись не может быть проверена.
- Утверждение содержит неприемлемое ограничение аудитории.
- Утверждение больше не действительно, или срок действия сообщения истек, см. раздел Проблемы синхронизации времени между IdP и поставщиком услуг.
- Ответ SAML содержит ошибку, указывающую на то, что поставщик облачных услуг получил сообщение SAML от IdP с кодом состояния ошибки.
Помните, что SAML соответствует схеме, поэтому вы должны придерживаться его стандарта при создании XML-запроса. Обязательно обратитесь к этому документу, чтобы увидеть все стандартные теги.
Еще несколькими примерами возможных опечаток могут быть:
- Не указание кодировки в начале XML: <?xml version="1.0" encoding="UTF-8"?>
- Ошибка в получателе данных SubjectConfirmationData : установите его на "https://signin.aws.amazon.com/saml".Не включено заявление об аутентификации.
Как просмотреть ответ SAML для устранения неполадок
https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_saml.html
В этой статье есть несколько идей, которые помогут вам выявить точную причину проблемы. Тем не менее, я также хотел бы дать вам несколько основных советов по отладке полученного вами утверждения SAML, чтобы найти детали, которые могут указать вам на первопричину проблемы.
Google Chrome и Firefox
- Нажмите F12, чтобы запустить консоль Developer Tools.
- Выберите вкладку Сеть, а затем выберите пункт Сохранить журнал (Persist Log в Firefox).
- Найдите сообщение SAML Post, затем просмотрите вкладку Payload в верхней части. Найдите элемент SAMLResponse, который содержит ответ в Base64-кодировке.
- Скопируйте его.
💡 Примечание по безопасности: поскольку утверждения SAML содержат конфиденциальную информацию, я не рекомендую вам использовать онлайн-декодеры base64 и использовать один из этих простых скриптов, чтобы сделать это с вашего локального терминала.
Windows systems (PowerShell):
PS C:\>[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(“base64encodedtext”))
MacOS and Linux systems:
$echo “base64encodedtext” | base64 —decode
Кроме того, если атрибуты вашего поставщика идентификационных данных не зашифрованы, надстройка SAML Tracer для браузера Firefox или декодер SAML-сообщений Chrome могут просмотреть эти атрибуты.****.
Учебники
Чтобы помочь вам в дальнейшем, вот две статьи из нашего блога, где мы делимся некоторыми советами по настройке SAML с GSuite (обратите внимание, что концепции и свойства аналогичны другим IdP).
- https://blog.leapp.cloud/how-to-saml-federate-your-aws-account-with-g-suite
- https://blog.leapp.cloud/how-to-update-in-bulk-g-suite-users-custom-attributes-with-google-admin-sdk
Выводы
В этой статье мы рассмотрели, как устранить очень неприятную ошибку федерации SAML: “Response did not contain a valid SAML assertion”.
Мы показали, что она может возникать, когда:
Ролевые атрибуты не установлены правильно в SAML-запросе - На стороне IdP.Имеет место десинхронизация времени между IdP и поставщиком услуг.Имеется несоответствие Metadata.xml между субъектами, поэтому сертификат не совпадает.В запросе есть опечатки или неверная структура SAML.
В общем, я всегда возвращаюсь к этой ссылке, когда мне нужно устранить неполадки в ответе SAML, поскольку проблема может заключаться в другой конфигурации в зависимости от используемого вами IdP.
Эта небольшая статья была полезна для всех вас, и до следующего раза, счастливых SAML утверждений, и до встречи в следующей статье! 😉.