Правила SAMLAssertion

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

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

  1. Если сообщение не является XML-файлом и для параметра IgnoreContentType не задано значение true, то возникает ошибка.
  2. Если задано значение "Шаблон", обработайте шаблон, как описано в правиле AssignMessage. Если какие-либо переменные отсутствуют и параметр IgnoreUnresolvedVariables не задан, то возникает ошибка.
  3. Если шаблон не задан, создайте утверждение, включающее значения параметров 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 Core.
  6. Правило будет применять любые дополнительные правила обработки элемента "Условия", как описано в разделе 2.5.1.1 спецификации SAML Core.
  7. Правило проверяет цифровую подпись 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>.
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>

Статьи по теме

Извлечение переменных: правило Extract Variables