Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Что
- Входящая аутентификация и авторизация: проверка утверждения 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 независимо от типа контента. |
||
Issuer |
Уникальный идентификатор поставщика идентификационной информации. Если присутствует необязательный атрибут
ref, значение атрибута Issuer будет присвоено во время выполнения на основе указанной переменной. Если необязательный атрибут ref отсутствует, будет использоваться значение атрибута "Издатель".
|
||
KeyStore |
Название хранилища ключей, содержащего закрытый ключ, и псевдоним закрытого ключа, используемого для цифровой подписи утверждений SAML.
|
||
OutputVariable |
|||
FlowVariable |
|||
Message |
Цель правила. Допустимые значения: message, request и response. Если задано значение message, правило условно извлекает объект письма на основе точки прикрепления правила. Если правило прикреплено к
потоку запроса, оно преобразует message в запрос, а если к
потоку ответа – message в ответ. |
||
XPath |
Выражение XPath, указывающее на элемент исходящего XML-документа, к которому правило прикрепит утверждение SAML. | ||
SignatureAlgorithm |
SHA1 или SHA256 | ||
Subject |
Уникальный идентификатор субъекта утверждения SAML. Если присутствует необязательный атрибут
ref, значение Subject будет присвоено во время выполнения на основе указанной переменной. Если присутствует необязательный атрибут ref, будет использоваться значение атрибута "Тема".
|
||
Template |
Если он присутствует, утверждение будет создано путем выполнения этого шаблона, замены всего, что обозначено символом
{}, соответствующей переменной и последующей цифровой подписи результата. Шаблон обрабатывается в соответствии с правилами AssignMessage.
Подробнее о том, как назначить правила для сообщений…
|
||
Проверка утверждения SAML
| Название поля | Описание |
|---|---|
name атрибут |
Название экземпляра правила. Название должно быть уникальным в организации.
В названии можно использовать только следующие символы:
A-Z0-9._\-$ %.
Однако в интерфейсе управления действуют дополнительные ограничения, например автоматически удаляются неалфавитно-цифровые символы.
|
ignoreContentType атрибут |
Логическое значение, которое может быть равно true или false. По умолчанию утверждение не будет создано, если тип контента сообщения не является XML Content-Type. Если задано значение true, сообщение будет обрабатываться как XML-файл независимо от типа контента. |
Source |
Цель правила. Допустимые значения: message, request и response. Если задано значение message, правило условно извлекает объект письма на основе точки прикрепления правила. Если правило прикреплено к
потоку запроса, оно преобразует message в запрос, а если к
потоку ответа – message в ответ. |
XPath |
Поддержка прекращена. Дочерний элемент
Source. Вместо них следует использовать AssertionXPath и SignedElementXPath.
|
AssertionXPath |
Дочерний элемент
Source. Выражение XPath, указывающее на элемент во входящем XML-документе, из которого правило может извлечь утверждение SAML.
|
SignedElementXPath |
Дочерний элемент
Source. Выражение XPath, указывающее на элемент во входящем XML-документе, из которого правило может извлечь подписанный элемент. Он может совпадать с XPath для свойства AssertionXPath или отличаться от него.
|
TrustStore |
Название хранилища доверенных сертификатов, содержащего доверенные сертификаты X.509, которые используются для проверки цифровых подписей в утверждениях SAML.
|
RemoveAssertion |
Логическое значение, которое может быть равно
true или false. Когда значение параметра true равно true, утверждение SAML удаляется из сообщения запроса до того, как оно будет перенаправлено в бэкенд-службу.
|
Примечания
Спецификация SAML определяет форматы и протоколы, которые позволяют приложениям обмениваться информацией в формате XML для аутентификации и авторизации.
Заявление о безопасности – это доверенный токен, в котором описан атрибут приложения, пользователя приложения или другого участника транзакции. Утверждения безопасности создаются и используются двумя типами объектов:
- Поставщики идентификационной информации: создают утверждения безопасности от имени участников.
- Поставщики услуг: проверяйте утверждения безопасности, используя доверенные отношения с поставщиками идентификационной информации.
Платформа API может выступать в качестве поставщика идентификационной информации и поставщика услуг. Он действует как поставщик идентификационной информации, создавая утверждения и прикрепляя их к сообщениям запросов, чтобы эти утверждения могли обрабатываться серверными сервисами. Он действует как поставщик услуг, проверяя утверждения в сообщениях входящих запросов.
Правила SAML поддерживают утверждения SAML, соответствующие версии 2.0 спецификации SAML Core и версии 1.0 спецификации профиля токена WS-Security SAML.
Сгенерировать утверждение SAML
Обработка правил:
- Если сообщение не является XML-файлом и для параметра IgnoreContentType не задано значение
true, то возникает ошибка. - Если задано значение "Шаблон", обработайте шаблон, как описано в правиле AssignMessage. Если какие-либо переменные отсутствуют и параметр IgnoreUnresolvedVariables не задан, то возникает ошибка.
- Если шаблон не задан, создайте утверждение, включающее значения параметров Subject и Issuer или ссылки на них.
- Подпишите утверждение с помощью указанного ключа.
- Добавить утверждение в сообщение по указанному пути XPath.
Проверка утверждения SAML
Обработка правил:
- Правило проверяет входящее письмо, чтобы убедиться, что тип медиаконтента запроса – XML. Для этого оно проверяет, соответствует ли тип контента форматам
text/(.*+)?xmlилиapplication/(.*+)?xml. Если тип медиафайла не XML и правило<IgnoreContentType>не задано, то будет зарегистрирована ошибка. - Правило будет анализировать XML-код. Если синтаксический анализ не удастся, будет сгенерирована ошибка.
- Правило извлечет подписанный элемент и утверждение, используя указанные пути XPath (
<SignedElementXPath>и<AssertionXPath>). Если ни один из этих путей не вернет элемент, правило вызовет ошибку. - Правило проверяет, является ли утверждение тем же элементом, что и подписанный, или дочерним по отношению к нему. Если это не так, правило вызовет ошибку.
- Если в утверждении есть элементы
<NotBefore>или<NotOnOrAfter>, правило проверит текущую временную метку на соответствие этим значениям, как описано в разделе 2.5.1 спецификации SAML Core. - Правило будет применять любые дополнительные правила обработки элемента "Условия", как описано в разделе 2.5.1.1 спецификации SAML Core.
- Правило проверяет цифровую подпись XML, используя значение хранилища доверенных сертификатов (
<TrustStore>), описанное выше. Если проверка не пройдена, правило вызывает ошибку.
Если правило выполнено без ошибок, разработчик прокси может быть уверен в следующем:
- Цифровая подпись утверждения действительна и была создана доверенным центром сертификации.
- Утверждение действительно для текущего периода времени.
- Субъект и эмитент утверждения будут извлечены и заданы в переменных потока. Другие правила должны использовать эти значения для дополнительной аутентификации, например проверять, является ли имя субъекта действительным, или передавать его целевой системе для проверки.
Для более сложной проверки можно использовать другие правила, например ExtractVariables, чтобы проанализировать необработанный XML-код утверждения.
Переменные процесса
В утверждении SAML может быть указано много информации. Утверждение SAML представляет собой XML-код, который можно проанализировать с помощью правила ExtractVariables и других механизмов, чтобы реализовать более сложные проверки.
| Переменная | Описание |
|---|---|
saml.id |
Идентификатор утверждения SAML |
saml.issuer |
Издатель утверждения, преобразованный из собственного типа XML в строку. |
saml.subject |
Тема утверждения, преобразованная из исходного типа XML в строку. |
saml.valid |
Возвращает значение "Истина" или "Ложь" в зависимости от результата проверки. |
saml.issueInstant |
IssueInstant |
saml.subjectFormat |
Формат темы |
saml.scmethod |
Способ подтверждения субъекта |
saml.scdaddress |
Адрес для подтверждения запроса субъекта данных |
saml.scdinresponse |
Данные подтверждения темы в ответе |
saml.scdrcpt |
Получатель данных для подтверждения субъекта |
saml.authnSnooa |
Атрибут SessionNotOnOrAfter в элементе AuthnStatement |
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>Статьи по теме
Извлечение переменных: правило Extract Variables