Вы просматриваете документацию 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 |
Ссылка на ошибку
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
| Error name | Cause | Fix |
|---|---|---|
SourceNotConfigured |
One or more of the following elements of the Validate SAML Assertion
policy is not defined or empty: <Source>, <XPath>,
<Namespaces>, <Namespace>.
|
build |
TrustStoreNotConfigured |
If the <TrustStore> element is empty or not specified in the
ValidateSAMLAssertion policy, then the deployment of the API proxy fails.
A valid Trust Store is required.
|
build |
NullKeyStoreAlias |
If the child element <Alias> is empty or not specified in the <Keystore>
element of Generate SAML Assertion policy, then the deployment of the API
proxy fails. A valid Keystore alias is required.
|
build |
NullKeyStore |
If the child element <Name> is empty or not specified in the <Keystore>
element of GenerateSAMLAssertion policy, then the deployment of the API
proxy fails. A valid Keystore name is required.
|
build |
NullIssuer |
If the <Issuer> element is empty or not specified in the Generate SAML
Assertion policy, then the deployment of the API proxy fails. A
valid <Issuer> value is required.
|
build |
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
| Variables | Where | Example |
|---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault. The fault name is the last part of the fault code. | fault.name = "InvalidMediaTpe" |
GenerateSAMLAssertion.failed |
For a validate SAML assertion policy configuration, the error prefix is
ValidateSAMLAssertion. |
GenerateSAMLAssertion.failed = true |
Example error response
{ "fault": { "faultstring": "GenerateSAMLAssertion[GenSAMLAssert]: Invalid media type", "detail": { "errorcode": "steps.saml.generate.InvalidMediaTpe" } } }
Example fault rule
<FaultRules>
<FaultRule name="invalid_saml_rule">
<Step>
<Name>invalid-saml</Name>
</Step>
<Condition>(GenerateSAMLAssertion.failed = "true")</Condition>
</FaultRule>
</FaultRules>Связанные темы
Извлечение переменных: политика извлечения переменных