Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Что
- Входящая аутентификация и авторизация: проверка политики утверждений SAML.
Тип политики SAML позволяет API-прокси проверять утверждения SAML, прикрепленные к входящим SOAP-запросам. Политика SAML проверяет входящие сообщения, содержащие утверждение SAML с цифровой подписью, отклоняет их, если они недействительны, и устанавливает переменные, которые позволяют дополнительным политикам или самим бэкэнд-сервисам дополнительно проверять информацию в утверждении. - Генерация исходящих токенов: создание политики утверждений SAML.
Тип политики SAML позволяет API-прокси добавлять утверждения SAML к исходящим XML-запросам. Эти утверждения затем становятся доступны для того, чтобы бэкэнд-сервисы могли применять дальнейшую обработку безопасности для аутентификации и авторизации.
Образцы
Сгенерировать утверждение SAML
<GenerateSAMLAssertion name="SAML" ignoreContentType="false"> <CanonicalizationAlgorithm /> <Issuer ref="reference">Issuer name</Issuer> <KeyStore> <Name ref="reference">keystorename</Name> <Alias ref="reference">alias</Alias> </KeyStore> <OutputVariable> <FlowVariable>assertion.content</FlowVariable> <Message name="request"> <Namespaces> <Namespace prefix="test">http://www.example.com/test</Namespace> </Namespaces> <XPath>/envelope/header</XPath> </Message> </OutputVariable> <SignatureAlgorithm /> <Subject ref="reference">Subject name</Subject> <Template ignoreUnresolvedVariables="false"> <!-- A lot of XML goes here, in CDATA, with {} around each variable --> </Template> </GenerateSAMLAssertion>
Создание утверждения SAML
Проверка утверждения SAML
<ValidateSAMLAssertion name="SAML" ignoreContentType="false"> <Source name="request"> <Namespaces> <Namespace prefix='soap'>http://schemas.xmlsoap.org/soap/envelope/</Namespace> <Namespace prefix='wsse'>http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd</Namespace> <Namespace prefix='saml'>urn:oasis:names:tc:SAML:2.0:assertion</Namespace> </Namespaces> <AssertionXPath>/soap:Envelope/soap:Header/wsse:Security/saml:Assertion</AssertionXPath> <SignedElementXPath>/soap:Envelope/soap:Header/wsse:Security/saml:Assertion</SignedElementXPath> </Source> <TrustStore>TrustStoreName</TrustStore> <RemoveAssertion>false</RemoveAssertion> </ValidateSAMLAssertion>
Проверка утверждения SAML
Ссылка на элемент
Сгенерировать утверждение SAML
| Название поля | Описание | ||
|---|---|---|---|
атрибут name | Имя экземпляра политики. Имя должно быть уникальным в организации. В имени разрешены только следующие символы: A-Z0-9._\-$ % . Однако пользовательский интерфейс управления устанавливает дополнительные ограничения, например, автоматически удаляет небуквенно-цифровые символы. | ||
атрибут ignoreContentType | Логическое значение, которое может принимать значения true или false . По умолчанию проверка не будет сгенерирована, если тип содержимого сообщения не является XML Content-Type. Если установлено значение true , то сообщение будет рассматриваться как XML независимо от Content-Type. | ||
Issuer | Уникальный идентификатор поставщика идентификации. Если присутствует необязательный атрибут ref , то значение Issuer будет присвоено во время выполнения на основе указанной переменной. Если необязательный атрибут ref отсутствует, то будет использовано значение Issuer. | ||
KeyStore | Название хранилища ключей (KeyStore), содержащего закрытый ключ и псевдоним закрытого ключа, используемого для цифровой подписи утверждений SAML. | ||
OutputVariable | |||
FlowVariable | |||
Message | Цель политики. Допустимые значения: message , request и response . Если установлено message , политика условно получает объект сообщения в зависимости от точки прикрепления политики. При прикреплении к потоку request политика преобразует message в request, а при прикреплении к потоку response политика преобразует message в response. | ||
XPath | Выражение XPath, указывающее элемент в исходящем XML-документе, к которому политика будет прикреплять утверждение SAML. | ||
SignatureAlgorithm | SHA1 или SHA256 | ||
Subject | Уникальный идентификатор субъекта утверждения SAML. Если присутствует необязательный атрибут ref , то значение Subject будет присвоено во время выполнения на основе указанной переменной. Если присутствует необязательный атрибут ref , то будет использовано значение Subject. | ||
Template | Если утверждение присутствует, оно будет сгенерировано путем выполнения этого шаблона, замены всего, что обозначено фигурными скобками {} , соответствующей переменной, а затем цифровой подписи результата. Шаблон обрабатывается в соответствии с правилами политики AssignMessage. См. Политика AssignMessage . | ||
Проверка утверждения SAML
| Название поля | Описание |
|---|---|
атрибут name | Имя экземпляра политики. Имя должно быть уникальным в организации. В имени разрешены только следующие символы: A-Z0-9._\-$ % . Однако пользовательский интерфейс управления устанавливает дополнительные ограничения, например, автоматически удаляет небуквенно-цифровые символы. |
атрибут ignoreContentType | Логическое значение, которое может принимать значения true или false . По умолчанию проверка не будет сгенерирована, если тип содержимого сообщения не является XML Content-Type. Если установлено значение true , сообщение будет рассматриваться как XML независимо от Content-Type. |
Source | Цель политики. Допустимые значения: message , request и response . Если установлено message , политика условно получает объект сообщения в зависимости от точки прикрепления политики. При прикреплении к потоку request политика преобразует message в request, а при прикреплении к потоку response политика преобразует message в response. |
XPath | Устарело. Дочерний элемент Source . Используйте AssertionXPath и SignedElementXPath . |
AssertionXPath | Дочерний элемент Source . Выражение XPath, указывающее элемент во входящем XML-документе, из которого политика может извлечь утверждение SAML. |
SignedElementXPath | Дочерний Source . Выражение XPath, указывающее элемент во входящем XML-документе, из которого политика может извлечь подписанный элемент. Это может отличаться от XPath для AssertionXPath или совпадать с ним. |
TrustStore | Название хранилища доверенных сертификатов (TrustStore), содержащего доверенные сертификаты X.509, используемые для проверки цифровых подписей в утверждениях SAML. |
RemoveAssertion | Логическое значение, которое может принимать значения true или false . Если true , утверждение SAML будет удалено из сообщения запроса перед его пересылкой в бэкэнд-сервис. |
Примечания по использованию
Спецификация Security Assertion Markup Language (SAML) определяет форматы и протоколы, позволяющие приложениям обмениваться информацией в формате XML для аутентификации и авторизации.
«Утверждение безопасности» — это доверенный токен, описывающий атрибут приложения, пользователя приложения или другого участника транзакции. Утверждения безопасности управляются и используются двумя типами сущностей:
- Поставщики идентификационных данных: генерируют утверждения безопасности от имени участников.
- Поставщики услуг: Проверяйте утверждения безопасности посредством доверительных отношений с поставщиками идентификационных данных.
API-платформа может выступать как в качестве поставщика идентификационных данных, так и в качестве поставщика услуг. В качестве поставщика идентификационных данных она генерирует утверждения и прикрепляет их к сообщениям запросов, делая эти утверждения доступными для обработки бэкэнд-сервисами. В качестве поставщика услуг она проверяет утверждения во входящих сообщениях запросов.
Тип политики SAML поддерживает утверждения SAML, соответствующие версии 2.0 основной спецификации SAML и версии 1.0 спецификации профиля токенов SAML WS-Security.
Сгенерировать утверждение SAML
Обработка политик:
- Если сообщение не является XML-файлом и параметр IgnoreContentType не установлен в
true, то следует вызвать ошибку. - Если параметр "Template" задан, обработайте шаблон, как описано для политики AssignMessage. Если какие-либо переменные отсутствуют и параметр IgnoreUnresolvedVariables не задан, вызовите ошибку.
- Если параметр "Template" не задан, то сформируйте утверждение, включающее значения параметров Subject и Issuer или их ссылки.
- Подпишите утверждение, используя указанный ключ.
- Добавьте утверждение в сообщение по указанному XPath.
Проверка утверждения SAML
Обработка политик:
- Политика проверяет входящее сообщение, чтобы убедиться, что тип носителя запроса — XML, проверяя, соответствует ли тип содержимого форматам
text/(.*+)?xmlилиapplication/(.*+)?xml. Если тип носителя не XML и параметр<IgnoreContentType>не задан, политика выдаст ошибку. - Политика выполнит анализ XML-файла. Если анализ не удастся, будет выдана ошибка.
- Политика извлечет подписанный элемент и утверждение, используя указанные XPath-пути (
<SignedElementXPath>и<AssertionXPath>). Если ни один из этих путей не вернет элемент, политика выдаст ошибку. - Политика проверит, совпадает ли утверждение с подписанным элементом или является ли он дочерним элементом подписанного элемента. Если это не так, политика выдаст ошибку.
- Если в утверждении присутствует хотя бы один из элементов
<NotBefore>или<NotOnOrAfter>, политика проверит текущую метку времени на соответствие этим значениям, как описано в разделе 2.5.1 ядра SAML. - Данная политика будет применять любые дополнительные правила обработки «Условий», описанные в разделе 2.5.1.1 ядра SAML.
- Данная политика проверяет цифровую подпись XML, используя значение хранилища доверенных сертификатов (
<TrustStore>), описанное выше. Если проверка не удается, политика генерирует ошибку.
После завершения обработки политики без возникновения ошибок разработчик прокси-сервера может быть уверен в следующем:
- Цифровая подпись утверждения действительна и была подписана доверенным центром сертификации.
- Утверждение справедливо для текущего периода времени.
- Субъект и отправитель утверждения будут извлечены и установлены в переменные потока. Использование этих значений для дополнительной аутентификации, например, для проверки действительности имени субъекта или передачи его в целевую систему для проверки, является обязанностью других политик.
Для более сложной проверки могут использоваться и другие политики, такие как ExtractVariables.
Переменные потока
В утверждении SAML может быть указано множество различных элементов информации. Само утверждение SAML представляет собой XML-файл, который может быть проанализирован с помощью политики ExtractVariables и других механизмов для реализации более сложных проверок.
| Переменная | Описание |
|---|---|
saml.id | Идентификатор утверждения SAML |
saml.issuer | «Эмитент» утверждения, преобразованный из своего исходного XML-типа в строку. |
saml.subject | Объект утверждения, преобразованный из своего исходного XML-типа в строку. |
saml.valid | Возвращает true или false в зависимости от результата проверки достоверности. |
saml.issueInstant | IssueInstant |
saml.subjectFormat | Формат темы |
saml.scmethod | метод подтверждения субъекта |
saml.scdaddress | Адрес для подтверждения субъекта |
saml.scdinresponse | Данные подтверждения субъекта в ответе |
saml.scdrcpt | Получатель данных подтверждения субъекта |
saml.authnSnooa | AuthnStatement SessionNotOnOrAfter |
saml.authnContextClassRef | AuthnStatement AuthnContextClassRef |
saml.authnInstant | AuthnStatement AuthInstant |
saml.authnSessionIndex | Индекс сессии AuthnStatement |
Ссылка на ошибку
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются Edge, когда эта политика вызывает ошибку. Эту информацию важно знать, если вы разрабатываете правила обработки ошибок. Дополнительные сведения см. в разделах Что нужно знать об ошибках политики и Обработка ошибок .
Ошибки развертывания
Эти ошибки могут возникнуть при развертывании прокси-сервера, содержащего эту политику.
| Название ошибки | Причина | Исправить |
|---|---|---|
SourceNotConfigured | Один или несколько из следующих элементов политики проверки утверждений SAML не определены или пусты: <Source> , <XPath> , <Namespaces> , <Namespace> . | build |
TrustStoreNotConfigured | Если элемент <TrustStore> пуст или не указан в политике ValidateSAMLAssertion, развертывание прокси-сервера API завершается неудачей. Требуется действующее хранилище доверенных сертификатов. | build |
NullKeyStoreAlias | Если дочерний элемент <Alias> пуст или не указан в элементе <Keystore> политики создания утверждений SAML, развертывание прокси-сервера API завершается неудачно. Требуется действительный псевдоним хранилища ключей. | build |
NullKeyStore | Если дочерний элемент <Name> пуст или не указан в элементе <Keystore> политики GenerateSAMLAssertion, развертывание прокси-сервера API завершается неудачно. Требуется допустимое имя хранилища ключей. | build |
NullIssuer | Если элемент <Issuer> пуст или не указан в политике создания утверждений SAML, развертывание прокси-сервера API завершается неудачно. Требуется допустимое значение <Issuer> . | build |
Переменные неисправности
Эти переменные устанавливаются при возникновении ошибки во время выполнения. Дополнительные сведения см. в разделе Что нужно знать об ошибках политики .
| Переменные | Где | Пример |
|---|---|---|
fault.name=" fault_name " | fault_name — имя ошибки . Имя неисправности — это последняя часть кода неисправности. | fault.name = "InvalidMediaTpe" |
GenerateSAMLAssertion.failed | Для проверки конфигурации политики утверждений SAML префикс ошибки — ValidateSAMLAssertion . | GenerateSAMLAssertion.failed = true |
Пример ответа об ошибке
{ "fault": { "faultstring": "GenerateSAMLAssertion[GenSAMLAssert]: Invalid media type", "detail": { "errorcode": "steps.saml.generate.InvalidMediaTpe" } } }
Пример правила неисправности
<FaultRules>
<FaultRule name="invalid_saml_rule">
<Step>
<Name>invalid-saml</Name>
</Step>
<Condition>(GenerateSAMLAssertion.failed = "true")</Condition>
</FaultRule>
</FaultRules>Связанные темы
Извлечение переменных: политика извлечения переменных