Spec-Zone.ru › Elasticsearch 8
›Руководство по Elasticsearch [8.17] ›Защита Elastic Stack ›Авторизация пользователей

Настройка единого входа SAML в Elastic Stack

Elastic Stack поддерживает единый вход SAML (SSO) в Kibana, используя Elasticsearch в качестве бэкенд-сервиса. В терминологии SAML, Elastic Stack выступает в роли провайдера сервисов.

Другим необходимым компонентом для включения единого входа SAML является провайдер идентификации, который отвечает за управление учетными данными и выполняет фактическую аутентификацию пользователей.

Если вы заинтересованы в настройке единого входа в Kibana, вам необходимо предоставить Elasticsearch информацию о вашем провайдере идентификации и зарегистрировать Elastic Stack как известного провайдера сервисов в этом провайдере. Также потребуются некоторые изменения в конфигурации Kibana для активации провайдера аутентификации SAML.

Поддержка SAML в Kibana разработана с предположением, что это будет основной (или единственный) метод аутентификации для пользователей данного экземпляра Kibana. После включения аутентификации SAML в Kibana она будет применяться ко всем пользователям, пытающимся войти в систему. Раздел Настройка Kibana содержит более подробную информацию об этом процессе.

Провайдер идентификации

Elastic Stack поддерживает профили SAML 2.0 SSO веб-браузера и однократного выхода и может интегрироваться с любым провайдером идентификации (IdP), поддерживающим как минимум профиль SAML 2.0 SSO веб-браузера. Он был протестирован с рядом популярных реализаций IdP, таких как Microsoft Active Directory Federation Services (ADFS), Azure Active Directory (AAD) и Okta.

Это руководство предполагает, что у вас уже есть существующий IdP и вы хотите добавить Kibana в качестве провайдера сервисов.

Elastic Stack использует стандартный документ метаданных SAML в формате XML, определяющий возможности и характеристики вашего IdP. Вы должны иметь возможность загрузить или сгенерировать такой документ в интерфейсе администрирования вашего IdP.

Загрузите документ метаданных IdP и сохраните его в каталоге config на каждом узле Elasticsearch. Для целей этого руководства мы предположим, что вы сохраняете его как config/saml/idp-metadata.xml.

IdP будет присвоен идентификатор (EntityID в терминологии SAML), который чаще всего выражается в форме Унифицированного идентификатора ресурса (URI). Интерфейс администрирования может сообщить вам об этом, или вам может потребоваться прочитать документ метаданных, чтобы найти его - ищите атрибут entityID в элементе EntityDescriptor.

Большинство IdP предоставят соответствующий файл метаданных со всеми необходимыми для Elastic Stack функциями и потребуют только шаги по настройке, описанные ниже. Для полноты, минимальные требования Elastic Stack к метаданным IdP:

  • <EntityDescriptor> с entityID, соответствующим конфигурации Elasticsearch настройки
  • <IDPSSODescriptor>, поддерживающий протокол SAML 2.0 (urn:oasis:names:tc:SAML:2.0:protocol).
  • Как минимум один <KeyDescriptor>, настроенный для подписи (то есть, имеющий use="signing" или оставляющий use не указанным)
  • <SingleSignOnService> с типом связи HTTP-Redirect (urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect)
  • Если вы хотите поддерживать однократный выход, <SingleLogoutService> с типом связи HTTP-Redirect (urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect)

Elastic Stack требует, чтобы все сообщения от IdP были подписаны. Для аутентификационных <Response> сообщений подпись может быть применена либо к самому ответу, либо к отдельным утверждениям. Для <LogoutRequest> сообщений само сообщение должно быть подписано, а подпись должна быть предоставлена в качестве параметра URL, как требуется для связи HTTP-Redirect.

Настройка Elasticsearch для аутентификации SAML

Для включения аутентификации SAML в Elasticsearch необходимо выполнить пять шагов:

  1. Включить SSL/TLS для HTTP
  2. Включить службу токенов
  3. Создать один или несколько доменов SAML
  4. Настроить сопоставление ролей
  5. Сгенерировать файл метаданных SAML для использования Вашим поставщиком идентификации (необязательно)

Включить TLS для HTTP

Если ваш кластер Elasticsearch работает в режиме производства, необходимо настроить HTTP-интерфейс для использования SSL/TLS перед включением аутентификации SAML.

Дополнительную информацию см. в Зашифровать HTTP-взаимодействие с Elasticsearch.

Включить службу токенов

Реализация SAML в Elasticsearch использует службу токенов Elasticsearch. Эта служба автоматически включается, если вы настраиваете TLS на HTTP-интерфейсе, и может быть явно настроена, включив следующее в ваш файл elasticsearch.yml:

xpack.security.authc.token.enabled: true

Создать домен SAML

Аутентификация SAML включается путем настройки домена SAML в цепочке аутентификации Elasticsearch.

Этот домен имеет несколько обязательных настроек и ряд дополнительных. Доступные настройки подробно описаны в Настройках безопасности. Например, настройки домена SAML, настройки подписи домена SAML, настройки шифрования домена SAML, настройки SSL домена SAML. Это руководство покажет вам наиболее распространенные настройки.

Создайте домен, добавив следующее в ваш файл конфигурации elasticsearch.yml. Каждое значение конфигурации объяснено ниже.

xpack.security.authc.realms.saml.saml1:
  order: 2
  idp.metadata.path: saml/idp-metadata.xml
  idp.entity_id: "https://sso.example.com/"
  sp.entity_id:  "https://kibana.example.com/"
  sp.acs: "https://kibana.example.com/api/security/saml/callback"
  sp.logout: "https://kibana.example.com/logout"
  attributes.principal: "urn:oid:0.9.2342.19200300.100.1.1"
  attributes.groups: "urn:oid:1.3.6.1.4.1.5923.1.5.1."

SAML используется при аутентификации через Kibana, но не является эффективным способом прямой аутентификации в REST API Elasticsearch. По этой причине мы рекомендуем включить по крайней мере один дополнительный домен, такой как родной домен, в цепочку аутентификации для использования клиентами API.

Используемые в примере значения конфигурации:

xpack.security.authc.realms.saml.saml1
Это определяет новый домен аутентификации SAML под названием "saml1". См. Домены для получения более подробной информации о доменах.
order
Порядок домена в цепочке доменов. Домены с меньшим порядком имеют более высокий приоритет и проверяются в первую очередь. Мы рекомендуем присваивать парольным доменам, таким как file, native, LDAP и Active Directory, наименьший порядок (наивысший приоритет), за которым следуют SSO-домены, такие как SAML и OpenID Connect. Если у вас есть несколько доменов одного типа, присвойте наиболее часто используемому домену наименьший порядок, чтобы он проверялся в первую очередь.
idp.metadata.path
Это путь к файлу метаданных, который вы сохранили для своего поставщика идентификации. Указанный здесь путь является относительным по отношению к вашему каталогу config/. Elasticsearch автоматически отслеживает изменения в этом файле и перезагружает конфигурацию при каждом обновлении.
idp.entity_id
Это идентификатор (SAML EntityID), используемый Вашим поставщиком идентификации. Он должен совпадать с атрибутом entityID в файле метаданных.
sp.entity_id
Это уникальный идентификатор вашего экземпляра Kibana, выраженный как URI. Вы будете использовать это значение при добавлении Kibana в качестве поставщика услуг в своем IdP. Мы рекомендуем использовать базовый URL вашего экземпляра Kibana в качестве идентификатора.
sp.acs
Конечная точка Assertion Consumer Service (ACS) — это URL в Kibana, который принимает сообщения об аутентификации от IdP. Эта конечная точка ACS поддерживает только SAML HTTP-POST связывание. Это должен быть URL, доступный из веб-браузера пользователя, пытающегося войти в Kibana; он не должен быть непосредственно доступен Elasticsearch или IdP. Правильное значение может изменяться в зависимости от того, как вы установили Kibana и есть ли какие-либо прокси-серверы, но обычно это будет ${kibana-url}/api/security/saml/callback, где ${kibana-url} — это базовый URL вашего экземпляра Kibana.
sp.logout
Это URL в Kibana, который принимает сообщения о выходе из системы от IdP. Как и URL sp.acs, он должен быть доступен из веб-браузера, но не должен быть непосредственно доступен Elasticsearch или IdP. Правильное значение может изменяться в зависимости от того, как вы установили Kibana и есть ли какие-либо прокси-серверы, но обычно это будет ${kibana-url}/logout, где ${kibana-url} — это базовый URL вашего экземпляра Kibana.
attributes.principal
См. Сопоставление атрибутов.
attributes.groups
См. Сопоставление атрибутов.

Сопоставление атрибутов

Когда пользователь подключается к Kibana через ваш поставщик удостоверений, поставщик удостоверений предоставит утверждение SAML о пользователе. Утверждение будет содержать заявление об аутентификации, указывающее, что пользователь успешно прошёл аутентификацию в IdP, и одно или несколько заявлений об атрибутах, которые будут включать атрибуты пользователя.

Эти атрибуты могут включать:

  • имя пользователя
  • адрес электронной почты пользователя
  • группы или роли пользователя

Атрибуты в SAML имеют имена, используемые с помощью URI, такие как urn:oid:0.9.2342.19200300.100.1.1 или http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn, и имеют один или несколько значений, связанных с ними.

Эти идентификаторы атрибутов различаются между IdP, и большинство IdP предлагают способы настройки URI и связанных с ними значений.

Elasticsearch использует эти атрибуты, чтобы получить информацию о пользователе, который вошёл в систему, и их можно использовать для сопоставления ролей (ниже).

Для того чтобы эти атрибуты были полезны, Elasticsearch и IdP должны иметь общее значение для имён атрибутов. Это делается вручную путём настройки IdP и области SAML для использования одного и того же имени URI для каждого логического атрибута пользователя.

Рекомендуемые шаги по настройке этих атрибутов SAML следующие:

  1. Обратитесь к своему IdP, чтобы узнать, какие атрибуты пользователей он может предоставить. Это сильно зависит от поставщика, но вы должны иметь возможность получить список из документации или от местного администратора.
  2. Прочитайте список свойств пользователей, поддерживаемых Elasticsearch, и определите, какие из них вам полезны и могут быть предоставлены вашим IdP. Минимально необходим атрибут principal.
  3. Настройте свой IdP для «выпуска» этих атрибутов в ваш поставщик услуг Kibana SAML. Этот процесс зависит от поставщика — некоторые из них предоставят интерфейс пользователя для этого, в то время как другим может потребоваться редактирование конфигурационных файлов. Обычно IdP (или ваш местный администратор) предоставит рекомендации о том, какой URI использовать для каждого атрибута. Вы можете просто принять эти рекомендации, так как служба Elasticsearch полностью настраивается и не требует использования каких-либо конкретных URI.
  4. Настройте область SAML в Elasticsearch, чтобы связать свойства пользователя Elasticsearch (см. список ниже) с URI, которые вы настроили в своём IdP. В приведённом выше примере мы настроили атрибуты principal и groups.
Специальные имена атрибутов

В общем случае Elasticsearch ожидает, что настроенное значение атрибута будет URI, таким как urn:oid:0.9.2342.19200300.100.1.1, однако есть некоторые дополнительные имена, которые можно использовать:

nameid
Это использует значение SAML NameID (все ведущие и хвостовые пробелы удалены) вместо атрибута SAML. Элементы SAML NameID — это необязательное, но часто предоставляемое поле в утверждении SAML, которое IdP может использовать для идентификации субъекта этого утверждения. В некоторых случаях NameID будет относиться к идентификатору входа пользователя (имени пользователя) в IdP, но во многих случаях это будут внутренние идентификаторы, не имеющие очевидного смысла вне IdP.
nameid:persistent
Это использует значение SAML NameID (все ведущие и хвостовые пробелы удалены), но только если формат NameID — urn:oasis:names:tc:SAML:2.0:nameid-format:persistent. У элемента SAML NameID есть необязательный атрибут Format, указывающий на семантику предоставленного имени. IdP часто настраиваются с «временными» NameID, которые представляют новый идентификатор для каждой сессии. Поскольку использование временного NameID в качестве части сопоставления атрибутов редко бывает полезно, имя атрибута «nameid:persistent» можно использовать в качестве механизма безопасности, который вызовет ошибку, если вы попытаетесь сопоставить атрибут из NameID, который не имеет постоянного значения.

Поставщики удостоверений могут быть статически настроены для выпуска NameID с определенным форматом, или они могут быть настроены для попытки соответствовать требованиям SP. SP объявляют свои требования как часть запроса на аутентификацию, используя элемент, который называется NameIDPolicy. Если это необходимо, вы можете установить соответствующие настройки с именем nameid_format, чтобы запросить, чтобы IdP выпустил NameID с определенным форматом.

friendlyName
Атрибут SAML может иметь friendlyName помимо своего имени, основанного на URI. Например, атрибут с именем urn:oid:0.9.2342.19200300.100.1.1 может также иметь friendlyName uid. Вы можете использовать эти friendlyName в сопоставлении атрибутов, но рекомендуется использовать имена, основанные на URI, так как friendlyName не являются ни стандартизированными, ни обязательными.

В примере ниже настроена область для использования постоянного nameid для принципала и атрибута с friendlyName «roles» для групп пользователя.

xpack.security.authc.realms.saml.saml1:
  order: 2
  idp.metadata.path: saml/idp-metadata.xml
  idp.entity_id: "https://sso.example.com/"
  sp.entity_id:  "https://kibana.example.com/"
  sp.acs: "https://kibana.example.com/api/security/saml/callback"
  attributes.principal: "nameid:persistent"
  attributes.groups: "roles"
  nameid_format: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
Свойства пользователей Elasticsearch

Область SAML Elasticsearch может быть настроена для сопоставления SAML attributes со следующими свойствами аутентифицированного пользователя:

principal
(Требуется) Это имя пользователя, которое будет применено к пользователю, аутентифицирующемуся в этой области. principal отображается в таких местах, как журналы аудита Elasticsearch.
groups

(Рекомендуется) Если вы хотите использовать концепцию групп или ролей IdP в качестве основы для привилегий пользователя Elasticsearch, вы должны сопоставить их с этим атрибутом. groups передаются непосредственно в ваши правила сопоставления ролей.

Некоторые IdP настроены для отправки списка groups в виде единственного значения, строки, разделенной запятыми. Для сопоставления этого атрибута SAML с настройкой attributes.groups в области Elasticsearch вы можете настроить разделитель строк с помощью настройки attribute_delimiters.group.

Например, разделение значения атрибута SAML engineering,elasticsearch-admins,employees по разделителю , приведет к engineering, elasticsearch-admins и employees в качестве списка групп для пользователя.

name
(Необязательно) Полное имя пользователя.
mail
(Необязательно) Адрес электронной почты пользователя.
dn
(Необязательно) X.500 отличительное имя пользователя.
Извлечение частичных значений из атрибутов SAML

В некоторых случаях атрибут IdP может содержать больше информации, чем вы хотите использовать в Elasticsearch. Частый пример — тот, где IdP работает исключительно с адресами электронной почты, но вы хотите, чтобы пользовательский principal использовал часть local-name адреса электронной почты. Например, если их адрес электронной почты был james.wong@staff.example.com, то вы хотите, чтобы их principal был просто james.wong.

Это можно сделать, используя настройку attribute_patterns в области Elasticsearch, как показано в конфигурации области ниже:

xpack.security.authc.realms.saml.saml1:
  order: 2
  idp.metadata.path: saml/idp-metadata.xml
  idp.entity_id: "https://sso.example.com/"
  sp.entity_id:  "https://kibana.example.com/"
  sp.acs: "https://kibana.example.com/api/security/saml/callback"
  attributes.principal: "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"
  attribute_patterns.principal: "^([^@]+)@staff\\.example\\.com$"

В этом случае principal пользователя сопоставляется с атрибутом электронной почты, но к значению применяется регулярное выражение перед его назначением пользователю. Если регулярное выражение соответствует, то результатом первой группы используется как эффективное значение. Если регулярное выражение не соответствует, то сопоставление атрибутов завершается неудачей.

В этом примере адрес электронной почты должен принадлежать домену staff.example.com, а затем используется локальная часть (все, что перед @) в качестве принципала. Любые пользователи, которые пытаются войти в систему с другим доменом электронной почты, потерпят неудачу, потому что регулярное выражение не будет соответствовать их адресу электронной почты, а следовательно, атрибут principal — который является обязательным — не будет заполнен.

Небольшие ошибки в этих регулярных выражениях могут иметь серьезные последствия для безопасности. Например, если мы случайно упустим заключительную $ из примера выше, то мы будем соответствовать любому адресу электронной почты, где домен начинается с staff.example.com, и это примет адрес электронной почты, такой как admin@staff.example.com.attacker.net. Важно убедиться, что ваши регулярные выражения максимально точны, чтобы вы не открывали несанкционированный путь для атак имитации пользователей.

Запрос определённых методов аутентификации

Иногда для SAML SP необходимо наложить определённые ограничения на аутентификацию, которая будет выполняться на IdP, чтобы оценить уровень доверия, который можно предоставить соответствующему ответу об аутентификации. Ограничения могут касаться метода аутентификации (пароль, сертификаты клиента и т. д.), метода идентификации пользователя во время регистрации и других деталей. Elasticsearch реализует SAML 2.0 Authentication Context, который можно использовать для этой цели, как определено в спецификации SAML 2.0 Core.

Короче говоря, SAML SP определяет набор значений Authentication Context Class Reference, которые описывают ограничения, которые необходимо наложить на IdP, и отправляет эти значения в запросе об аутентификации. IdP пытается предоставить эти ограничения. Если это невозможно, попытка аутентификации завершается неудачей. Если пользователь успешно прошёл аутентификацию, в утверждении об аутентификации ответа SAML содержится указание о соблюденных ограничениях.

Вы можете определить значения Authentication Context Class Reference, используя параметр req_authn_context_class_ref в конфигурации домена SAML. См. настройки домена SAML.

Elasticsearch поддерживает только метод сравнения exact для Authentication Context. При получении ответа об аутентификации от IdP Elasticsearch проверяет значение Authentication Context Class Reference, которое является частью утверждения об аутентификации SAML утверждения. Если оно совпадает с одним из запрошенных значений, аутентификация считается успешной. В противном случае попытка аутентификации завершается неудачей.

Выход SAML

Протокол SAML поддерживает концепцию Single Logout (SLO). Уровень поддержки SLO варьируется между поставщиками идентификации. Вы должны обратиться к документации своего IdP, чтобы определить, какие службы выхода он предоставляет.

По умолчанию Elastic Stack будет поддерживать SAML SLO, если следующие условия выполняются:

  • В метаданных вашего IdP указано, что IdP предоставляет службу SLO
  • Ваш IdP выпускает NameID в субъекте SAML утверждения, которое он выдает для ваших пользователей
  • Вы настраиваете sp.logout
  • Настройка idp.use_single_logout не является false
Служба IdP SLO

Одно из значений, которые Elasticsearch считывает из метаданных SAML IdP, это <SingleLogoutService>. Для работы Single Logout с Elastic stack Elasticsearch требует, чтобы это значение существовало и поддерживало связывание urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect.

Elastic Stack будет отправлять как <LogoutRequest>, так и <LogoutResponse> сообщения в эту службу, когда это необходимо.

Настройка sp.logout

Настройка домена Elasticsearch sp.logout указывает URL в Kibana, в который IdP может отправлять как <LogoutRequest>, так и <LogoutResponse> сообщения. Эта служба использует связывание SAML HTTP-Redirect.

Elasticsearch обработает <LogoutRequest> сообщения и выполнит глобальный выход, аннулировав все существующие токены безопасности Elasticsearch, связанные с предоставленной сессией SAML.

Если вы не настроите значение для sp.logout, Elasticsearch отклонит все <LogoutRequest> сообщения.

IdP часто требуют, чтобы LogoutRequest сообщения были подписаны, поэтому вам может потребоваться настроить сертификаты подписи.

Настройка idp.use_single_logout

Если ваш IdP предоставляет <SingleLogoutService>, но вы не хотите его использовать, вы можете настроить idp.use_single_logout: false в своём домене SAML, и Elasticsearch проигнорирует службу SLO, предоставляемую вашим IdP. В этом случае, когда пользователь выходит из Kibana, он аннулирует свою сессию Elasticsearch (токен безопасности), но не выполнит выход на IdP.

Использование Kibana без единого выхода

Если ваш IdP не поддерживает Single Logout, или вы решили его не использовать, тогда Kibana выполнит только «локальный выход».

Это означает, что Kibana аннулирует токен сессии, используемый для связи с Elasticsearch, но не сможет выполнить аннулирование сессии поставщика идентификации. В большинстве случаев это означает, что пользователи Kibana по-прежнему считаются авторизованными на IdP. Следовательно, если пользователь переходит на главную страницу Kibana, он будет автоматически повторно авторизован и начнёт новую сессию Kibana, не вводя никаких учетных данных.

Возможные решения этой проблемы:

  • Обратитесь к администратору IdP или поставщику, чтобы получить услугу Single Logout
  • Если ваш IdP предоставляет службу Single Logout, убедитесь, что она включена в файле метаданных IdP, и не устанавливайте idp.use_single_logout на значение false.
  • Попросите пользователей закрывать браузер после выхода из Kibana
  • Включите настройку force_authn в своём домене SAML. Эта настройка заставляет Elastic Stack запрашивать новую аутентификацию у IdP каждый раз, когда пользователь пытается войти в Kibana. Эта настройка по умолчанию false, так как это может быть более сложным для пользователя, но это также может быть эффективной защитой, чтобы предотвратить использование существующих сессий IdP.

Шифрование и подпись

Elastic Stack поддерживает генерацию подписанных сообщений SAML (для аутентификации и/или выхода), проверку подписанных сообщений SAML от IdP (как для аутентификации, так и для выхода) и может обрабатывать зашифрованное содержимое.

Вы можете настроить Elasticsearch для подписи, шифрования или того и другого с использованием одних и тех же или отдельных ключей для каждого из этих процессов.

Elastic Stack использует сертификаты X.509 с закрытыми ключами RSA для криптографии SAML. Эти ключи можно сгенерировать с помощью любого стандартного инструмента SSL, включая инструмент elasticsearch-certutil.

Ваш IdP может потребовать, чтобы Elastic Stack имел криптографический ключ для подписи сообщений SAML и предоставил соответствующий сертификат подписи в конфигурации поставщика услуг (либо в файле метаданных SAML Elastic Stack, либо в ручном режиме в интерфейсе администрирования IdP). Хотя большинство IdP не ожидают, что запросы на аутентификацию будут подписаны, обычно требуется подпись для запросов на выход. Ваш IdP проверит эти подписи по отношению к сертификату подписи, который был настроен для поставщика услуг SAML Elastic Stack.

Сертификаты шифрования редко необходимы, но Elastic Stack поддерживает их в тех случаях, когда IdP или локальные политики требуют их использования.

Генерация сертификатов и ключей

Elasticsearch поддерживает сертификаты и ключи в формате PEM, PKCS#12 или JKS. Некоторые поставщики идентификации более ограничены в поддерживаемых форматах и потребуют предоставления сертификатов в виде файла в определенном формате. Вы должны обратиться к документации вашего IdP, чтобы определить поддерживаемые форматы. Поскольку формат PEM поддерживается чаще всего, в примерах ниже будут генерироваться сертификаты в этом формате.

Используя инструмент elasticsearch-certutil, вы можете сгенерировать сертификат подписи с помощью следующей команды:

bin/elasticsearch-certutil cert --self-signed --pem --days 1100 --name saml-sign --out saml-sign.zip

Это

  • сгенерирует пару сертификата и ключа (подкоманда cert)
  • создаст файлы в формате PEM (опция -pem)
  • сгенерирует сертификат, действительный в течение 3 лет (-days 1100)
  • назовет сертификат saml-sign (опция -name)
  • сохранит сертификат и ключ в файле saml-sign.zip (опция -out)

Сгенерированный архив zip будет содержать 3 файла:

  • saml-sign.crt, открытый сертификат, который будет использоваться для подписи
  • saml-sign.key, закрытый ключ для сертификата
  • ca.crt, сертификат CA, который не нужен и может быть проигнорирован.

Сертификаты шифрования можно сгенерировать тем же процессом.

Настройка Elasticsearch для подписи

По умолчанию Elasticsearch будет подписывать все исходящие сообщения SAML, если ключ подписи был настроен.

Если вы хотите использовать ключи и сертификаты в формате PEM для подписи, то вы должны настроить следующие параметры в области SAML:

signing.certificate
Путь к файлу сертификата в формате PEM. Пример: saml/saml-sign.crt
signing.key
Путь к файлу ключа в формате PEM. Пример: saml/saml-sign.key
signing.secure_key_passphrase
Пароль к ключу, если файл зашифрован. Это защищённый параметр, который необходимо установить с помощью инструмента elasticsearch-keystore.

Если вы хотите использовать файлы в формате PKCS#12 или хранилище ключей Java для подписи, то вы должны настроить следующие параметры в области SAML:

signing.keystore.path
Путь к хранилищу ключей PKCS#12 или JKS. Пример: saml/saml-sign.p12
signing.keystore.alias
Имя ключа в хранилище. Пример: signing-key
signing.keystore.secure_password
Пароль к хранилищу ключей, если файл зашифрован. Это защищённый параметр, который необходимо установить с помощью инструмента elasticsearch-keystore.

Если вы хотите подписать некоторые, но не все исходящие сообщения SAML, то вы должны настроить следующий параметр в области SAML:

signing.saml_messages
Список типов сообщений для подписи. Тип сообщения определяется локальным именем XML-элемента, используемого для сообщения. Поддерживаемые значения: AuthnRequest, LogoutRequest и LogoutResponse.
Настройка Elasticsearch для зашифрованных сообщений

Функции безопасности Elasticsearch поддерживают один ключ для дешифрования сообщений. Если ключ настроен, Elasticsearch пытается использовать его для дешифрования элементов EncryptedAssertion и EncryptedAttribute в ответах на аутентификацию и элементов EncryptedID в запросах на выход.

Elasticsearch отклоняет любое сообщение SAML, содержащее EncryptedAssertion, которое невозможно дешифровать.

Если Assertion содержит как зашифрованные, так и текстовые атрибуты, то невозможность дешифровки зашифрованных атрибутов не приводит к автоматическому отклонению. Elasticsearch обрабатывает доступные текстовые атрибуты (и любые EncryptedAttributes, которые можно дешифровать).

Если вы хотите использовать ключи и сертификаты в формате PEM для шифрования SAML, то вы должны настроить следующие параметры в области SAML:

encryption.certificate
Путь к файлу сертификата в формате PEM. Пример: saml/saml-crypt.crt
encryption.key
Путь к файлу ключа в формате PEM. Пример: saml/saml-crypt.key
encryption.secure_key_passphrase
Пароль к ключу, если файл зашифрован. Это защищённый параметр, который необходимо установить с помощью инструмента elasticsearch-keystore.

Если вы хотите использовать файлы в формате PKCS#12 или хранилище ключей Java для шифрования SAML, то вы должны настроить следующие параметры в области SAML:

encryption.keystore.path
Путь к хранилищу ключей PKCS#12 или JKS. Пример: saml/saml-crypt.p12
encryption.keystore.alias
Имя ключа в хранилище. Пример: encryption-key
encryption.keystore.secure_password
Пароль к хранилищу ключей, если файл зашифрован. Это защищённый параметр, который необходимо установить с помощью инструмента elasticsearch-keystore.

Генерация метаданных SP

Некоторые поставщики идентификации поддерживают импорт файла метаданных от поставщика услуг. Это автоматически настраивает многие параметры интеграции между IdP и SP.

Elastic Stack поддерживает генерацию такого файла метаданных с помощью команды bin/elasticsearch-saml-metadata или API метаданных поставщика услуг SAML.

Вы можете сгенерировать метаданные SAML, отправив запрос API в Elasticsearch и сохранить их как XML-файл, используя инструменты, такие как jq. Например, следующая команда генерирует метаданные для области SAML realm1 и сохраняет их в файле metadata.xml:

curl -u user_name:password  -X GET http://localhost:9200/_security/saml/metadata/saml1 -H 'Content-Type: application/json' | jq -r '.[]' > metadata.xml

Настройка сопоставления ролей

При аутентификации пользователя с помощью SAML он идентифицируется в Elastic Stack, но это не предоставляет ему автоматически доступ для выполнения каких-либо действий или доступа к данным.

Пользователи SAML не могут ничего делать, пока им не назначены роли. Это можно сделать с помощью API добавления сопоставления ролей или с помощью областей авторизации.

Вы не можете использовать файлы сопоставления ролей для назначения ролей пользователям, аутентифицирующимся по SAML.

Это пример простого сопоставления ролей, которое предоставляет роль example_role любому пользователю, который аутентифицируется в области saml1:

resp = client.security.put_role_mapping(
    name="saml-example",
    roles=[
        "example_role"
    ],
    enabled=True,
    rules={
        "field": {
            "realm.name": "saml1"
        }
    },
)
print(resp)
const response = await client.security.putRoleMapping({
  name: "saml-example",
  roles: ["example_role"],
  enabled: true,
  rules: {
    field: {
      "realm.name": "saml1",
    },
  },
});
console.log(response);
PUT /_security/role_mapping/saml-example
{
  "roles": [ "example_role" ], 
  "enabled": true,
  "rules": {
    "field": { "realm.name": "saml1" }
  }
}

Роль example_role не является встроенной ролью Elasticsearch. В этом примере предполагается, что вы создали собственную пользовательскую роль с соответствующим доступом к вашим потокам данных, индексам и функциям Kibana.

Атрибуты, которые сопоставляются с помощью конфигурации области, используются для обработки правил сопоставления ролей, и эти правила определяют, какие роли предоставляются пользователю.

Поля пользователя, которые предоставляются сопоставлению ролей, выводятся из атрибутов SAML следующим образом:

  • username: Атрибут principal
  • dn: Атрибут dn
  • groups: Атрибут groups
  • metadata: См. Метаданные пользователя

Для получения дополнительной информации см. Сопоставление пользователей и групп с ролями и Сопоставления ролей.

Если ваш IdP имеет возможность предоставлять группы или роли поставщикам услуг, то вы должны сопоставить этот атрибут SAML с настройкой attributes.groups в области Elasticsearch, а затем использовать его в сопоставлении ролей, как показано в примере ниже.

Это сопоставление предоставляет роль Elasticsearch finance_data для всех пользователей, которые аутентифицируются через область saml1 с группой finance-team.

resp = client.security.put_role_mapping(
    name="saml-finance",
    roles=[
        "finance_data"
    ],
    enabled=True,
    rules={
        "all": [
            {
                "field": {
                    "realm.name": "saml1"
                }
            },
            {
                "field": {
                    "groups": "finance-team"
                }
            }
        ]
    },
)
print(resp)
const response = await client.security.putRoleMapping({
  name: "saml-finance",
  roles: ["finance_data"],
  enabled: true,
  rules: {
    all: [
      {
        field: {
          "realm.name": "saml1",
        },
      },
      {
        field: {
          groups: "finance-team",
        },
      },
    ],
  },
});
console.log(response);
PUT /_security/role_mapping/saml-finance
{
  "roles": [ "finance_data" ],
  "enabled": true,
  "rules": { "all": [
        { "field": { "realm.name": "saml1" } },
        { "field": { "groups": "finance-team" } } 
  ] }
}

Атрибут groups поддерживает использование подстановочных знаков (*). Дополнительную информацию см. в API создания или обновления сопоставлений ролей.

Если ваши пользователи также существуют в хранилище, к которому Elasticsearch может получить прямой доступ (например, в каталоге LDAP), то вы можете использовать области авторизации вместо сопоставлений ролей.

В этом случае выполните следующие шаги: 1. В области SAML назначьте атрибут SAML в качестве идентификатора пользователя для поиска, настроив настройку attributes.principal. 2. Создайте новую область, которая может искать пользователей в вашем локальном хранилище (например, область ldap). 3. В области SAML установите authorization_realms в имя области, созданной на шаге 2.

Метаданные пользователя

По умолчанию у пользователей, аутентифицирующихся по SAML, есть дополнительные поля метаданных.

  • saml_nameid будет установлено в значение элемента NameID в ответе на SAML аутентификацию
  • saml_nameid_format будет установлено в полном URI атрибута format NameID
  • Каждый атрибут SAML, предоставляемый в ответе на аутентификацию (независимо от того, сопоставляется ли он с свойством пользователя Elasticsearch), будет добавлен в качестве поля метаданных saml(name), где "name" — полное URI имя атрибута. Например, saml(urn:oid:0.9.2342.19200300.100.1.3).
  • Для каждого атрибута SAML, имеющего friendlyName, также будет добавлено поле метаданных saml_friendlyName, где "name" — полное URI имя атрибута. Например, saml_mail.

Это поведение можно отключить, добавив populate_user_metadata: false в настройках области saml.

Настройка Kibana

Для аутентификации по SAML в Kibana требуется несколько дополнительных настроек помимо стандартной конфигурации безопасности Kibana. Подробную информацию об доступных параметрах конфигурации вы найдете в документации по безопасности Kibana.

В частности, поскольку ваши узлы Elasticsearch настроены на использование TLS в HTTP-интерфейсе, вам необходимо настроить Kibana на использование URL-адреса https для подключения к Elasticsearch, и вам может потребоваться настроить elasticsearch.ssl.certificateAuthorities для доверия к сертификатам, которые были настроены для использования в Elasticsearch.

Аутентификация по SAML в Kibana зависит от следующих параметров таймаутов в kibana.yml:

  • xpack.security.session.idleTimeout
  • xpack.security.session.lifespan

Возможно, вам нужно будет изменить эти таймауты в соответствии с вашими требованиями безопасности.

Три дополнительных параметра, необходимые для поддержки SAML, показаны ниже:

xpack.security.authc.providers:
  saml.saml1:
    order: 0
    realm: "saml1"

Значения конфигурации, используемые в примере выше:

xpack.security.authc.providers
Добавить saml поставщик для указания Kibana на использование SAML SSO в качестве метода аутентификации.
xpack.security.authc.providers.saml.<provider-name>.realm
Установите это значение в имя области SAML, которое вы использовали в вашей конфигурации области Elasticsearch, например: saml1

Поддержка SAML и аутентификации по умолчанию в Kibana

Поддержка SAML в Kibana разработана с учетом того, что это будет основной (или единственный) метод аутентификации для пользователей этого экземпляра Kibana. Однако можно поддержать и SAML, и аутентификацию по умолчанию в одном экземпляре Kibana, установив xpack.security.authc.providers, как показано в примере ниже:

xpack.security.authc.providers:
  saml.saml1:
    order: 0
    realm: "saml1"
  basic.basic1:
    order: 1

Если Kibana настроена таким образом, пользователи видят выбор в пользовательском интерфейсе селектора входа. Они могут войти с помощью SAML или ввести имя пользователя и пароль, опираясь на другие области аутентификации Elasticsearch. Только пользователи, имеющие имя пользователя и пароль для настроенной области аутентификации Elasticsearch, могут войти через форму входа Kibana.

Кроме того, при включенном поставщике аутентификации basic, вы можете разместить обратный прокси перед Kibana и настроить его на отправку заголовка базовой аутентификации (Authorization: Basic ....) для каждого запроса. Если этот заголовок присутствует и действителен, Kibana не инициирует процесс аутентификации SAML.

Работа с несколькими экземплярами Kibana

Если вы хотите иметь несколько экземпляров Kibana, которые аутентифицируются на одном кластере Elasticsearch, то каждый экземпляр Kibana, настроенный для аутентификации по SAML, требует своей собственной области SAML.

Каждая область SAML должна иметь свой уникальный идентификатор сущности (sp.entity_id) и свой собственный узел приема утверждений (sp.acs). Каждый экземпляр Kibana будет сопоставлен с соответствующей областью путем поиска сопоставимого значения sp.acs.

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

В следующем примере показано наличие 3 разных экземпляров Kibana, 2 из которых используют один и тот же внутренний IdP, а другой — другой IdP.

xpack.security.authc.realms.saml.saml_finance:
  order: 2
  idp.metadata.path: saml/idp-metadata.xml
  idp.entity_id: "https://sso.example.com/"
  sp.entity_id:  "https://kibana.finance.example.com/"
  sp.acs: "https://kibana.finance.example.com/api/security/saml/callback"
  sp.logout: "https://kibana.finance.example.com/logout"
  attributes.principal: "urn:oid:0.9.2342.19200300.100.1.1"
  attributes.groups: "urn:oid:1.3.6.1.4.1.5923.1.5.1."
xpack.security.authc.realms.saml.saml_sales:
  order: 3
  idp.metadata.path: saml/idp-metadata.xml
  idp.entity_id: "https://sso.example.com/"
  sp.entity_id:  "https://kibana.sales.example.com/"
  sp.acs: "https://kibana.sales.example.com/api/security/saml/callback"
  sp.logout: "https://kibana.sales.example.com/logout"
  attributes.principal: "urn:oid:0.9.2342.19200300.100.1.1"
  attributes.groups: "urn:oid:1.3.6.1.4.1.5923.1.5.1."
xpack.security.authc.realms.saml.saml_eng:
  order: 4
  idp.metadata.path: saml/idp-external.xml
  idp.entity_id: "https://engineering.sso.example.net/"
  sp.entity_id:  "https://kibana.engineering.example.com/"
  sp.acs: "https://kibana.engineering.example.com/api/security/saml/callback"
  sp.logout: "https://kibana.engineering.example.com/logout"
  attributes.principal: "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"

Возможно иметь один или несколько экземпляров Kibana, использующих SAML, в то время как другие экземпляры используют базовую аутентификацию через другой тип области (например, встроенную или LDAP).

Устранение неполадок при настройке домена SAML

Спецификация SAML 2.0 предоставляет множество вариантов и гибкости разработчикам, что, в свою очередь, добавляет сложности и количество доступных параметров конфигурации как для поставщика услуг (Elastic Stack), так и для поставщика удостоверений. Кроме того, различные домены безопасности имеют разные требования к безопасности, которые требуют специфической конфигурации. Были предприняты сознательные усилия, чтобы скрыть эту сложность с помощью разумных значений по умолчанию и подробной документации выше, но в случае возникновения проблем при настройке домена SAML, вы можете ознакомиться с нашей документацией по устранению неполадок SAML, которая содержит рекомендации и решения распространенных проблем.

SAML без Kibana

Домен SAML в Elasticsearch разработан для того, чтобы пользователи могли аутентифицироваться в Kibana, и поэтому большая часть руководства выше предполагает, что используется Kibana. В этом разделе описывается, как пользовательское веб-приложение может использовать соответствующие REST-API SAML для аутентификации пользователей в Elasticsearch с помощью SAML.

В этом разделе предполагается, что читатель знаком со стандартом SAML 2.0 и, более конкретно, с профилем SAML 2.0 веб-браузера Single Sign On.

Домены единого входа, такие как OpenID Connect и SAML, используют службу токенов в Elasticsearch и, в принципе, обменивают ответ на аутентификацию SAML или OpenID Connect на токен доступа Elasticsearch и токен обновления. Токен доступа используется в качестве учетных данных для последующих обращений к Elasticsearch. Токен обновления позволяет пользователю получить новые токены доступа Elasticsearch после истечения срока действия текущего.

Домен SAML

Вы должны создать домен SAML и настроить его в Elasticsearch. См. Настройка Elasticsearch для аутентификации SAML

Пользователь службы для доступа к API

Домен разработан с предположением, что необходим привилегированный субъект, действующий как прокси-сервер аутентификации. В данном случае пользовательское веб-приложение является прокси-сервером аутентификации, обрабатывающим аутентификацию конечных пользователей (точнее, «передающим» аутентификацию поставщику удостоверений SAML). API, связанные с SAML, требуют аутентификации и соответствующего уровня авторизации для аутентифицированного пользователя. По этой причине вы должны создать пользователя службы и назначить ему роль, которая предоставляет ему manage_saml право на кластер. Использование manage_token права на кластер будет необходимо после аутентификации, чтобы пользователь службы мог поддерживать доступ для обновления токенов доступа от имени аутентифицированных пользователей или для последующего их выхода из системы.

resp = client.security.put_role(
    name="saml-service-role",
    cluster=[
        "manage_saml",
        "manage_token"
    ],
)
print(resp)
const response = await client.security.putRole({
  name: "saml-service-role",
  cluster: ["manage_saml", "manage_token"],
});
console.log(response);
POST /_security/role/saml-service-role
{
  "cluster" : ["manage_saml", "manage_token"]
}
resp = client.security.put_user(
    username="saml-service-user",
    password="<somePasswordHere>",
    roles=[
        "saml-service-role"
    ],
)
print(resp)
const response = await client.security.putUser({
  username: "saml-service-user",
  password: "<somePasswordHere>",
  roles: ["saml-service-role"],
});
console.log(response);
POST /_security/user/saml-service-user
{
  "password" : "<somePasswordHere>",
  "roles"    : ["saml-service-role"]
}

Обработка процесса аутентификации, инициированного поставщиком услуг

В общих чертах, пользовательскому веб-приложению потребуется выполнить следующие шаги для аутентификации пользователя с помощью SAML в Elasticsearch:

  1. Отправьте HTTP-запрос POST на _security/saml/prepare, аутентифицировавшись как пользователь saml-service-user. Используйте либо имя домена SAML в конфигурации Elasticsearch, либо значение для URL Assertion Consumer Service в теле запроса. Дополнительные сведения см. в API SAML для подготовки аутентификации.

    resp = client.security.saml_prepare_authentication(
        realm="saml1",
    )
    print(resp)
    const response = await client.security.samlPrepareAuthentication({
      realm: "saml1",
    });
    console.log(response);
    POST /_security/saml/prepare
    {
      "realm" : "saml1"
    }
  2. Обработайте ответ от /_security/saml/prepare. Ответ Elasticsearch будет содержать 3 параметра: redirect, realm и id. Пользовательское веб-приложение должно сохранить значение id в сессии пользователя (на стороне клиента в cookie или на стороне сервера, если информация о сессии сохраняется таким образом). Также необходимо перенаправить браузер пользователя на URL, который был возвращен в параметре redirect. Значение id не следует игнорировать, так как оно используется в качестве nonce в SAML для предотвращения атак повторения.
  3. Обработайте последующий ответ от IdP SAML. После успешной аутентификации пользователя у поставщика удостоверений он будет перенаправлен обратно на URL Assertion Consumer Service. Этот sp.acs должен быть определен как URL, который обрабатывает пользовательское веб-приложение. При получении этого запроса HTTP POST пользовательское веб-приложение должно разобрать его и отправить HTTP-запрос POST в API _security/saml/authenticate. Оно должно аутентифицироваться как пользователь saml-service-user и передать закодированный в Base64 ответ SAML в теле запроса. Также необходимо передать значение id, которое ранее было сохранено в сессии пользователя.

    Дополнительные сведения см. в API SAML для аутентификации.

    resp = client.security.saml_authenticate(
        content="PHNhbWxwOlJlc3BvbnNlIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMD.....",
        ids=[
            "4fee3b046395c4e751011e97f8900b5273d56685"
        ],
    )
    print(resp)
    const response = await client.security.samlAuthenticate({
      content:
        "PHNhbWxwOlJlc3BvbnNlIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMD.....",
      ids: ["4fee3b046395c4e751011e97f8900b5273d56685"],
    });
    console.log(response);
    POST /_security/saml/authenticate
    {
      "content" : "PHNhbWxwOlJlc3BvbnNlIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMD.....",
      "ids" : ["4fee3b046395c4e751011e97f8900b5273d56685"]
    }

    Elasticsearch проверит это, и если все правильно, ответит токеном доступа, который можно использовать как токен Bearer для последующих запросов. Также предоставляется токен обновления, который можно использовать для обновления данного токена доступа, как описано в API для получения токена.

  4. Ответ на вызов /_security/saml/authenticate будет содержать только имя аутентифицированного пользователя. Если вам необходимо получить значения атрибутов SAML, содержащиеся в ответе SAML для этого пользователя, вы можете вызвать API аутентификации /_security/_authenticate/, используя токен доступа в качестве токена Bearer, и значения атрибутов SAML будут содержаться в ответе как часть Метаданных пользователя.

Обработка процесса аутентификации, инициированного поставщиком удостоверений

Elasticsearch также может обрабатывать процесс единого входа, инициированный поставщиком удостоверений, в профиле SAML 2 веб-браузера SSO. В этом случае аутентификация начинается с нежелательного ответа на аутентификацию от поставщика удостоверений SAML. Разница с SSO, инициированным поставщиком услуг, заключается в том, что веб-приложение должно обрабатывать запросы на sp.acs, которые не будут ответами на предыдущие перенаправления. Таким образом, у него не будет сессии для пользователя уже и не будет сохранённых значений для параметра id. Запрос к API _security/saml/authenticate будет выглядеть следующим образом в этом случае:

resp = client.security.saml_authenticate(
    content="PHNhbWxwOlJlc3BvbnNlIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMD.....",
    ids=[],
)
print(resp)
const response = await client.security.samlAuthenticate({
  content:
    "PHNhbWxwOlJlc3BvbnNlIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMD.....",
  ids: [],
});
console.log(response);
POST /_security/saml/authenticate
{
  "content" : "PHNhbWxwOlJlc3BvbnNlIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMD.....",
  "ids" : []
}

Обработка процесса выхода

  1. В какой-то момент, при необходимости, пользовательское веб-приложение может вывести пользователя из системы, используя API SAML для выхода и передавая токен доступа и токен обновления в качестве параметров. Например:

    resp = client.security.saml_logout(
        token="46ToAxZVaXVVZTVKOVF5YU04ZFJVUDVSZlV3",
        refresh_token="mJdXLtmvTUSpoLwMvdBt_w",
    )
    print(resp)
    const response = await client.security.samlLogout({
      token: "46ToAxZVaXVVZTVKOVF5YU04ZFJVUDVSZlV3",
      refresh_token: "mJdXLtmvTUSpoLwMvdBt_w",
    });
    console.log(response);
    POST /_security/saml/logout
    {
      "token" : "46ToAxZVaXVVZTVKOVF5YU04ZFJVUDVSZlV3",
      "refresh_token": "mJdXLtmvTUSpoLwMvdBt_w"
    }

    Если домен SAML настроен соответствующим образом, а IdP его поддерживает (см. Выход SAML), этот запрос вызовет инициированный поставщиком услуг SAML единый выход. В этом случае ответ будет включать параметр redirect, указывающий, куда необходимо перенаправить пользователя в IdP для завершения выхода.

  2. В качестве альтернативы, IdP может инициировать процесс единого выхода в какой-то момент. Для обработки этого процесса URL выхода (sp.logout) должен обрабатываться пользовательским веб-приложением. Запрос URL, на который будет перенаправлен пользователь, будет содержать запрос SAML выхода, и эта часть запроса должна быть передана в Elasticsearch с помощью API SAML для аннулирования.

    resp = client.security.saml_invalidate(
        query="SAMLRequest=nZFda4MwFIb%2FiuS%2BmviRpqFaClKQdbvo2g12M2KMraCJ9cRR9utnW4Wyi13sMie873MeznJ1aWrnS3VQGR0j4mLkKC1NUeljjA77zYyhVbIE0dR%2By7fmaHq7U%2BdegXWGpAZ%2B%2F4pR32luBFTAtWgUcCv56%2Fp5y30X87Yz1khTIycdgpUW9kY7WdsC9zxoXTvMvWuVV98YyMnSGH2SYE5pwALBIr9QKiwDGpW0oGVUznGeMyJZKFkQ4jBf5HnhUymjIhzCAL3KNFihbYx8TBYzzGaY7EnIyZwHzCWMfiDnbRIftkSjJr%2BFu0e9v%2B0EgOquRiiZjKpiVFp6j50T4WXoyNJ%2FEWC9fdqc1t%2F1%2B2F3aUpjzhPiXpqMz1%2FHSn4A&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=MsAYz2NFdovMG2mXf6TSpu5vlQQyEJAg%2B4KCwBqJTmrb3yGXKUtIgvjqf88eCAK32v3eN8vupjPC8LglYmke1ZnjK0%2FKxzkvSjTVA7mMQe2AQdKbkyC038zzRq%2FYHcjFDE%2Bz0qISwSHZY2NyLePmwU7SexEXnIz37jKC6NMEhus%3D",
        realm="saml1",
    )
    print(resp)
    const response = await client.security.samlInvalidate({
      query:
        "SAMLRequest=nZFda4MwFIb%2FiuS%2BmviRpqFaClKQdbvo2g12M2KMraCJ9cRR9utnW4Wyi13sMie873MeznJ1aWrnS3VQGR0j4mLkKC1NUeljjA77zYyhVbIE0dR%2By7fmaHq7U%2BdegXWGpAZ%2B%2F4pR32luBFTAtWgUcCv56%2Fp5y30X87Yz1khTIycdgpUW9kY7WdsC9zxoXTvMvWuVV98YyMnSGH2SYE5pwALBIr9QKiwDGpW0oGVUznGeMyJZKFkQ4jBf5HnhUymjIhzCAL3KNFihbYx8TBYzzGaY7EnIyZwHzCWMfiDnbRIftkSjJr%2BFu0e9v%2B0EgOquRiiZjKpiVFp6j50T4WXoyNJ%2FEWC9fdqc1t%2F1%2B2F3aUpjzhPiXpqMz1%2FHSn4A&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=MsAYz2NFdovMG2mXf6TSpu5vlQQyEJAg%2B4KCwBqJTmrb3yGXKUtIgvjqf88eCAK32v3eN8vupjPC8LglYmke1ZnjK0%2FKxzkvSjTVA7mMQe2AQdKbkyC038zzRq%2FYHcjFDE%2Bz0qISwSHZY2NyLePmwU7SexEXnIz37jKC6NMEhus%3D",
      realm: "saml1",
    });
    console.log(response);
    POST /_security/saml/invalidate
    {
      "query" : "SAMLRequest=nZFda4MwFIb%2FiuS%2BmviRpqFaClKQdbvo2g12M2KMraCJ9cRR9utnW4Wyi13sMie873MeznJ1aWrnS3VQGR0j4mLkKC1NUeljjA77zYyhVbIE0dR%2By7fmaHq7U%2BdegXWGpAZ%2B%2F4pR32luBFTAtWgUcCv56%2Fp5y30X87Yz1khTIycdgpUW9kY7WdsC9zxoXTvMvWuVV98YyMnSGH2SYE5pwALBIr9QKiwDGpW0oGVUznGeMyJZKFkQ4jBf5HnhUymjIhzCAL3KNFihbYx8TBYzzGaY7EnIyZwHzCWMfiDnbRIftkSjJr%2BFu0e9v%2B0EgOquRiiZjKpiVFp6j50T4WXoyNJ%2FEWC9fdqc1t%2F1%2B2F3aUpjzhPiXpqMz1%2FHSn4A&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=MsAYz2NFdovMG2mXf6TSpu5vlQQyEJAg%2B4KCwBqJTmrb3yGXKUtIgvjqf88eCAK32v3eN8vupjPC8LglYmke1ZnjK0%2FKxzkvSjTVA7mMQe2AQdKbkyC038zzRq%2FYHcjFDE%2Bz0qISwSHZY2NyLePmwU7SexEXnIz37jKC6NMEhus%3D",
      "realm" : "saml1"
    }

    Затем пользовательское веб-приложение должно также обработать ответ, который будет включать параметр redirect с URL в IdP, который содержит ответ SAML выхода. Приложение должно перенаправить пользователя туда для завершения выхода.

Для единого выхода, инициированного поставщиком услуг, IdP может вернуть ответ о выходе, который может быть проверен Elasticsearch с помощью API SAML для завершения выхода.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/saml-guide-stack.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API