SAML 身份验证 API

编辑

将 SAML Response 消息提交给 Elasticsearch 进行处理。

此 API 旨在供 Kibana 之外的自定义 Web 应用程序使用。如果您使用的是 Kibana,请参阅 在 Elastic Stack 上配置 SAML 单点登录

请求

编辑

POST /_security/saml/authenticate

描述

编辑

提交的 SAML 消息可以是:

  • 对先前使用 SAML 预准备身份验证 API 创建的 SAML 身份验证请求的响应。
  • 在 IdP 发起的单点登录 (SSO) 流程中,一个非请求的 SAML 消息。

在这两种情况下,SAML 消息都需要是一个 base64 编码的 XML 文档,其根元素为 <Response>

验证成功后,Elasticsearch 将返回 Elasticsearch 内部访问令牌和刷新令牌,随后可用于身份验证。此 API 端点实际上是将指示在 IdP 中成功身份验证的 SAML 响应交换为 Elasticsearch 访问令牌和刷新令牌,这些令牌可用于针对 Elasticsearch 进行身份验证。

Elasticsearch 通过 SAML API 公开了所有必要的 SAML 相关功能。Kibana 内部使用这些 API 来提供基于 SAML 的身份验证,但其他自定义 Web 应用程序或其他客户端也可以使用它们。另请参见 SAML 预准备身份验证 APISAML 无效 APISAML 注销 APISAML 完全注销 API

请求体

编辑
内容
(必需,字符串) 用户浏览器发送的 SAML 响应,通常是 Base64 编码的 XML 文档。
ID
(必需,数组) 一个 JSON 数组,包含 API 调用者针对当前用户拥有的所有有效 SAML 请求 ID。
领域
(可选,字符串) 应验证 SAML 响应的领域的名称。在定义多个 SAML 领域的情况下很有用。

响应体

编辑
access_token
(字符串) Elasticsearch 生成的访问令牌。
用户名
(字符串) 已验证用户的名称。
expires_in
(整数) 令牌过期前剩余的时间(以秒为单位)。
refresh_token
(字符串) Elasticsearch 生成的刷新令牌。
领域
(字符串) 用户通过其进行身份验证的领域的名称。

示例

编辑

以下示例将指示在 SAML IdP 中成功身份验证的 SAML 响应交换为 Elasticsearch 访问令牌和刷新令牌,以用于后续请求

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"]
}

API 返回以下响应

{
  "access_token" : "46ToAxZVaXVVZTVKOVF5YU04ZFJVUDVSZlV3",
  "username" : "Bearer",
  "expires_in" : 1200,
  "refresh_token": "mJdXLtmvTUSpoLwMvdBt_w",
  "realm": "saml1"
}