Политики утверждений SAML

Вы просматриваете документацию 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

Обработка политик:

  1. Если сообщение не является XML-файлом и параметр IgnoreContentType не установлен в true , то следует вызвать ошибку.
  2. Если параметр "Template" задан, обработайте шаблон, как описано для политики AssignMessage. Если какие-либо переменные отсутствуют и параметр IgnoreUnresolvedVariables не задан, вызовите ошибку.
  3. Если параметр "Template" не задан, то сформируйте утверждение, включающее значения параметров Subject и Issuer или их ссылки.
  4. Подпишите утверждение, используя указанный ключ.
  5. Добавьте утверждение в сообщение по указанному XPath.

Проверка утверждения SAML

Обработка политик:

  1. Политика проверяет входящее сообщение, чтобы убедиться, что тип носителя запроса — XML, проверяя, соответствует ли тип содержимого форматам text/(.*+)?xml или application/(.*+)?xml . Если тип носителя не XML и параметр <IgnoreContentType> не задан, политика выдаст ошибку.
  2. Политика выполнит анализ XML-файла. Если анализ не удастся, будет выдана ошибка.
  3. Политика извлечет подписанный элемент и утверждение, используя указанные XPath-пути ( <SignedElementXPath> и <AssertionXPath> ). Если ни один из этих путей не вернет элемент, политика выдаст ошибку.
  4. Политика проверит, совпадает ли утверждение с подписанным элементом или является ли он дочерним элементом подписанного элемента. Если это не так, политика выдаст ошибку.
  5. Если в утверждении присутствует хотя бы один из элементов <NotBefore> или <NotOnOrAfter> , политика проверит текущую метку времени на соответствие этим значениям, как описано в разделе 2.5.1 ядра SAML.
  6. Данная политика будет применять любые дополнительные правила обработки «Условий», описанные в разделе 2.5.1.1 ядра SAML.
  7. Данная политика проверяет цифровую подпись 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>.
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.
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.
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.
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.

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>

Связанные темы

Извлечение переменных: политика извлечения переменных