OpenID Connect 认证 API

编辑

提交对 OAuth 2.0 身份验证请求的响应,以便 Elasticsearch 使用。成功验证后,Elasticsearch 将响应一个 Elasticsearch 内部访问令牌和刷新令牌,该令牌可随后用于身份验证。

请求

编辑

POST /_security/oidc/authenticate

描述

编辑

此 API 端点基本上将成功的 OpenID Connect 身份验证响应交换为用于身份验证的 Elasticsearch 访问令牌和刷新令牌。

Elasticsearch 通过 OpenID Connect API 公开所有必要的 OpenID Connect 相关功能。 这些 API 由 Kibana 内部使用,以提供基于 OpenID Connect 的身份验证,但也可以由其他自定义 Web 应用程序或其他客户端使用。另请参阅 OpenID Connect 准备认证 APIOpenID Connect 注销 API

请求体

编辑
redirect_uri
(必需,字符串)在成功身份验证后,OpenID Connect 提供商将用户代理重定向到的 URL,以响应身份验证请求。 预计此 URL 将按原样提供(URL 编码),从响应正文中获取,或作为 OpenID Connect 提供商响应中的 Location 标头的值。
state
(必需,字符串)用于维护身份验证请求和响应之间的状态。此值需要与先前对 /_security/oidc/prepare 的调用提供的值相同,或者是 Elasticsearch 生成并包含在该调用响应中的值。
nonce
(必需,字符串)用于将客户端会话与 ID 令牌关联,并缓解重放攻击。此值需要与先前对 /_security/oidc/prepare 的调用提供的值相同,或者是 Elasticsearch 生成并包含在该调用响应中的值。
realm
(可选,字符串)用于标识应用于进行此身份验证的 OpenID Connect 域的名称。在定义了多个域时很有用。

示例

编辑

以下示例请求将从 OpenID Connect 提供商返回的响应(在成功身份验证后)交换为 Elasticsearch 访问令牌和刷新令牌,以便在后续请求中使用。此示例来自使用授权代码授予流程的身份验证。

resp = client.security.oidc_authenticate(
    body={
        "redirect_uri": "https://oidc-kibana.elastic.co:5603/api/security/oidc/callback?code=jtI3Ntt8v3_XvcLzCFGq&state=4dbrihtIAt3wBTwo6DxK-vdk-sSyDBV8Yf0AjdkdT5I",
        "state": "4dbrihtIAt3wBTwo6DxK-vdk-sSyDBV8Yf0AjdkdT5I",
        "nonce": "WaBPH0KqPVdG5HHdSxPRjfoZbXMCicm5v1OiAj0DUFM",
        "realm": "oidc1"
    },
)
print(resp)
const response = await client.security.oidcAuthenticate({
  body: {
    redirect_uri:
      "https://oidc-kibana.elastic.co:5603/api/security/oidc/callback?code=jtI3Ntt8v3_XvcLzCFGq&state=4dbrihtIAt3wBTwo6DxK-vdk-sSyDBV8Yf0AjdkdT5I",
    state: "4dbrihtIAt3wBTwo6DxK-vdk-sSyDBV8Yf0AjdkdT5I",
    nonce: "WaBPH0KqPVdG5HHdSxPRjfoZbXMCicm5v1OiAj0DUFM",
    realm: "oidc1",
  },
});
console.log(response);
POST /_security/oidc/authenticate
{
  "redirect_uri" : "https://oidc-kibana.elastic.co:5603/api/security/oidc/callback?code=jtI3Ntt8v3_XvcLzCFGq&state=4dbrihtIAt3wBTwo6DxK-vdk-sSyDBV8Yf0AjdkdT5I",
  "state" : "4dbrihtIAt3wBTwo6DxK-vdk-sSyDBV8Yf0AjdkdT5I",
  "nonce" : "WaBPH0KqPVdG5HHdSxPRjfoZbXMCicm5v1OiAj0DUFM",
  "realm" : "oidc1"
}

以下示例输出包含响应中生成的访问令牌、令牌过期的时长(以秒为单位)、类型和刷新令牌

{
  "access_token" : "dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==",
  "type" : "Bearer",
  "expires_in" : 1200,
  "refresh_token": "vLBPvmAB6KvwvJZr27cS"
}