Вы просматриваете документацию по 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 |
Справочник по ошибкам
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые задаются Edge, когда это правило вызывает ошибку. Эта информация важна, если вы разрабатываете правила обработки ошибок. Подробнее о том, что нужно знать об ошибках в правилах и об обработке ошибок…
Ошибки развертывания
Эти ошибки могут возникать при развертывании прокси-сервера, содержащего это правило.
| Название ошибки | Причина | Исправить |
|---|---|---|
SourceNotConfigured |
Один или несколько из следующих элементов правила Validate SAML Assertion (Проверка утверждения 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>Статьи по теме
Извлечение переменных: правило Extract Variables