Вы просматриваете документацию 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. Если для этого параметра установлено значение true , сообщение будет обрабатываться как XML независимо от типа содержимого. | ||
Issuer | Уникальный идентификатор поставщика удостоверений. Если присутствует необязательный атрибут ref , то значение Issuer будет присвоено во время выполнения на основе указанной переменной. Если необязательный атрибут ref отсутствует, будет использоваться значение Issuer. | ||
KeyStore | Имя хранилища ключей, которое содержит закрытый ключ и псевдоним закрытого ключа, используемого для цифровой подписи утверждений SAML. | ||
OutputVariable | |||
FlowVariable | |||
Message | Цель политики. Допустимые значения: message , request и response . Если установлено значение message , политика условно извлекает объект сообщения на основе точки присоединения политики. При присоединении к потоку запроса политика преобразует message в запрос, а при присоединении к потоку ответа политика преобразует message в ответ. | ||
XPath | Выражение XPath, указывающее элемент исходящего XML-документа, к которому политика прикрепит утверждение SAML. | ||
SignatureAlgorithm | SHA1 или SHA256 | ||
Subject | Уникальный идентификатор субъекта утверждения SAML. Если присутствует необязательный атрибут ref , то значение субъекта будет назначено во время выполнения на основе указанной переменной. Если присутствует необязательный атрибут ref , то будет использоваться значение Темы. | ||
Template | Если оно присутствует, то утверждение будет сгенерировано путем запуска этого шаблона, замены всего, обозначенного {} на соответствующую переменную, а затем цифровой подписи результата. Шаблон обрабатывается в соответствии с правилами политики AssignMessage. См. политику назначения сообщений . | ||
Проверка утверждения SAML
| Имя поля | Описание |
|---|---|
атрибут name | Имя экземпляра политики. Имя должно быть уникальным в организации. В имени можно использовать следующие символы: A-Z0-9._\-$ % . Однако пользовательский интерфейс управления налагает дополнительные ограничения, например автоматическое удаление символов, не являющихся буквенно-цифровыми. |
атрибут ignoreContentType | Логическое значение, которому может быть присвоено значение true или false . По умолчанию утверждение не будет создано, если тип контента сообщения не является типом контента XML. Если для этого параметра установлено 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 | Имя хранилища TrustStore, содержащего доверенные сертификаты X.509, используемые для проверки цифровых подписей утверждений SAML. |
RemoveAssertion | Логическое значение, которому может быть присвоено значение true или false . Если true , утверждение SAML будет удалено из сообщения запроса перед тем, как сообщение будет перенаправлено во внутреннюю службу. |
Примечания по использованию
Спецификация языка разметки утверждений безопасности (SAML) определяет форматы и протоколы, которые позволяют приложениям обмениваться информацией в формате XML для аутентификации и авторизации.
«Утверждение безопасности» — это доверенный токен, который описывает атрибут приложения, пользователя приложения или другого участника транзакции. Утверждения безопасности управляются и используются двумя типами объектов:
- Поставщики удостоверений: создание утверждений безопасности от имени участников.
- Поставщики услуг: проверка утверждений безопасности посредством доверительных отношений с поставщиками удостоверений.
Платформа API может выступать в качестве поставщика удостоверений и поставщика услуг. Он действует как поставщик удостоверений, генерируя утверждения и прикрепляя их к сообщениям запроса, делая эти утверждения доступными для обработки серверными службами. Он действует как поставщик услуг, проверяя утверждения входящих сообщений запроса.
Тип политики SAML поддерживает утверждения SAML, соответствующие версии 2.0 базовой спецификации SAML и версии 1.0 спецификации профиля токена SAML WS-Security.
Создать утверждение SAML
Обработка политики:
- Если сообщение не является XML и для IgnoreContentType не установлено значение
true, возникает ошибка. - Если установлен «Шаблон», обработайте шаблон, как описано для политики AssignMessage. Если какие-либо переменные отсутствуют и параметр IgnoreUnresolvedVariables не установлен, возникает ошибка.
- Если «Шаблон» не установлен, создайте утверждение, включающее значения параметров «Субъект» и «Издатель» или их ссылки.
- Подпишите утверждение, используя указанный ключ.
- Добавьте утверждение в сообщение по указанному 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>и<ValidateSigner>, как описано выше. Если проверка не удалась, политика выдаст ошибку.
Как только политика завершится без возникновения ошибок, разработчик прокси-сервера может быть уверен в следующем:
- Цифровая подпись утверждения действительна и подписана доверенным центром сертификации.
- Утверждение действительно для текущего периода времени.
- Субъект и отправитель утверждения будут извлечены и установлены в переменных потока. Другие политики обязаны использовать эти значения для дополнительной аутентификации, например, для проверки правильности имени субъекта или передачи его в целевую систему для проверки.
Другие политики, такие как ExtractVariables, могут использоваться для анализа необработанного XML утверждения для более сложной проверки.
Переменные потока
В утверждении SAML можно указать множество фрагментов информации. Само утверждение SAML представляет собой XML, который можно анализировать с помощью политики ExtractVariables и других механизмов для реализации более сложных проверок.
| Переменная | Описание |
|---|---|
saml.id | Идентификатор утверждения SAML |
saml.issuer | «Издатель» утверждения, преобразованный из собственного типа XML в строку. |
saml.subject | «Субъект» утверждения, преобразованный из собственного типа XML в строку. |
saml.valid | Возвращает true или false в зависимости от результата проверки достоверности. |
saml.issueInstant | ПроблемаМгновенный |
saml.subjectFormat | Формат темы |
saml.scmethod | Метод подтверждения субъекта |
saml.scdaddress | Адрес данных подтверждения субъекта |
saml.scdinresponse | Данные подтверждения субъекта в ответе |
saml.scdrcpt | Получатель данных подтверждения субъекта |
saml.authnSnooa | AuthnStatement SessionNotOnOrAfter |
saml.authnContextClassRef | AuthnStatement AuthnContextClassRef |
saml.authnInstant | AuthnStatement |
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>Связанные темы
Извлечение переменных: политика извлечения переменных