Политики утверждений 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

Ссылка на ошибку

В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются Edge, когда эта политика вызывает ошибку. Эту информацию важно знать, если вы разрабатываете правила обработки ошибок. Дополнительные сведения см. в разделах Что нужно знать об ошибках политики и Обработка ошибок .

Ошибки развертывания

Эти ошибки могут возникнуть при развертывании прокси-сервера, содержащего эту политику.

Название ошибки Причина Исправить
SourceNotConfigured Один или несколько из следующих элементов политики проверки утверждений SAML не определены или пусты: <Source> , <XPath> , <Namespaces> , <Namespace> .
TrustStoreNotConfigured Если элемент <TrustStore> пуст или не указан в политике ValidateSAMLAssertion, развертывание прокси-сервера API завершается неудачей. Требуется действующее хранилище доверенных сертификатов.
NullKeyStoreAlias Если дочерний элемент <Alias> пуст или не указан в элементе <Keystore> политики создания утверждений SAML, развертывание прокси-сервера API завершается неудачно. Требуется действительный псевдоним хранилища ключей.
NullKeyStore Если дочерний элемент <Name> пуст или не указан в элементе <Keystore> политики GenerateSAMLAssertion, развертывание прокси-сервера API завершается неудачно. Требуется допустимое имя хранилища ключей.
NullIssuer Если элемент <Issuer> пуст или не указан в политике создания утверждений SAML, развертывание прокси-сервера API завершается неудачно. Требуется допустимое значение <Issuer> .

Переменные неисправности

Эти переменные устанавливаются при возникновении ошибки во время выполнения. Дополнительные сведения см. в разделе Что нужно знать об ошибках политики .

Переменные Где Пример
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>

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

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