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

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

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

  1. Если сообщение не является XML и для IgnoreContentType не установлено значение true , возникает ошибка.
  2. Если установлен «Шаблон», обработайте шаблон, как описано для политики AssignMessage. Если какие-либо переменные отсутствуют и параметр IgnoreUnresolvedVariables не установлен, возникает ошибка.
  3. Если «Шаблон» не установлен, создайте утверждение, включающее значения параметров «Субъект» и «Издатель» или их ссылки.
  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> и <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>.
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>

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

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