OpenID Connect 准备身份验证 API

编辑

OpenID Connect 准备身份验证 API

编辑

基于 Elasticsearch 中相应 OpenID Connect 身份验证域的配置,创建 OAuth 2.0 身份验证请求作为 URL 字符串。

请求

编辑

POST /_security/oidc/prepare

描述

编辑

此 API 的响应是一个指向已配置 OpenID Connect 提供程序的授权端点的 URL,可用于重定向用户的浏览器以继续身份验证过程。

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

请求体

编辑

以下参数可以在请求体中指定

realm
(可选,字符串)Elasticsearch 中 OpenID Connect 域的名称,其配置应用于生成身份验证请求。当指定 iss 时,不能指定。 realmiss 必须指定其中一个。
state
(可选,字符串)用于维护身份验证请求和响应之间状态的值,通常用作跨站点请求伪造缓解措施。如果 API 的调用者没有提供值,Elasticsearch 将自行生成一个具有足够熵的值并在响应中返回。
nonce
(可选,字符串)用于将客户端会话与 ID 令牌相关联并缓解重放攻击的值。如果 API 的调用者没有提供值,Elasticsearch 将自行生成一个具有足够熵的值并在响应中返回。
iss
(可选,字符串)在第三方发起的单点登录的情况下,这是 RP 要将身份验证请求发送到的 OP 的发行者标识符。当指定 realm 时,不能指定。 realmiss 必须指定其中一个。
login_hint
(可选,字符串)在第三方发起的单点登录的情况下,要包含在身份验证请求中的字符串值,作为 login_hint 参数。当指定 realm 时,此参数无效。

示例

编辑

以下示例为 OpenID Connect 域 oidc1 生成身份验证请求

resp = client.security.oidc_prepare_authentication(
    body={
        "realm": "oidc1"
    },
)
print(resp)
const response = await client.security.oidcPrepareAuthentication({
  body: {
    realm: "oidc1",
  },
});
console.log(response);
POST /_security/oidc/prepare
{
  "realm" : "oidc1"
}

以下示例响应输出包含指向 OpenID Connect 提供程序的授权端点的 URI,以及身份验证请求的所有参数,作为 HTTP GET 参数

{
  "redirect" : "http://127.0.0.1:8080/c2id-login?scope=openid&response_type=id_token&redirect_uri=https%3A%2F%2Fmy.fantastic.rp%2Fcb&state=4dbrihtIAt3wBTwo6DxK-vdk-sSyDBV8Yf0AjdkdT5I&nonce=WaBPH0KqPVdG5HHdSxPRjfoZbXMCicm5v1OiAj0DUFM&client_id=elasticsearch-rp",
  "state" : "4dbrihtIAt3wBTwo6DxK-vdk-sSyDBV8Yf0AjdkdT5I",
  "nonce" : "WaBPH0KqPVdG5HHdSxPRjfoZbXMCicm5v1OiAj0DUFM",
  "realm" : "oidc1"
}

以下示例为 OpenID Connect 域 oidc1 生成身份验证请求,其中 state 和 nonce 的值由客户端生成

resp = client.security.oidc_prepare_authentication(
    body={
        "realm": "oidc1",
        "state": "lGYK0EcSLjqH6pkT5EVZjC6eIW5YCGgywj2sxROO",
        "nonce": "zOBXLJGUooRrbLbQk5YCcyC8AXw3iloynvluYhZ5"
    },
)
print(resp)
const response = await client.security.oidcPrepareAuthentication({
  body: {
    realm: "oidc1",
    state: "lGYK0EcSLjqH6pkT5EVZjC6eIW5YCGgywj2sxROO",
    nonce: "zOBXLJGUooRrbLbQk5YCcyC8AXw3iloynvluYhZ5",
  },
});
console.log(response);
POST /_security/oidc/prepare
{
  "realm" : "oidc1",
  "state" : "lGYK0EcSLjqH6pkT5EVZjC6eIW5YCGgywj2sxROO",
  "nonce" : "zOBXLJGUooRrbLbQk5YCcyC8AXw3iloynvluYhZ5"
}

以下示例响应输出包含指向 OpenID Connect 提供程序的授权端点的 URI,以及身份验证请求的所有参数,作为 HTTP GET 参数

{
  "redirect" : "http://127.0.0.1:8080/c2id-login?scope=openid&response_type=id_token&redirect_uri=https%3A%2F%2Fmy.fantastic.rp%2Fcb&state=lGYK0EcSLjqH6pkT5EVZjC6eIW5YCGgywj2sxROO&nonce=zOBXLJGUooRrbLbQk5YCcyC8AXw3iloynvluYhZ5&client_id=elasticsearch-rp",
  "state" : "lGYK0EcSLjqH6pkT5EVZjC6eIW5YCGgywj2sxROO",
  "nonce" : "zOBXLJGUooRrbLbQk5YCcyC8AXw3iloynvluYhZ5",
  "realm" : "oidc1"
}

以下示例为第三方发起的单点登录生成身份验证请求,指定应用于匹配适当的 OpenID Connect 身份验证域的发行者

resp = client.security.oidc_prepare_authentication(
    body={
        "iss": "http://127.0.0.1:8080",
        "login_hint": "this_is_an_opaque_string"
    },
)
print(resp)
const response = await client.security.oidcPrepareAuthentication({
  body: {
    iss: "http://127.0.0.1:8080",
    login_hint: "this_is_an_opaque_string",
  },
});
console.log(response);
POST /_security/oidc/prepare
{
  "iss" : "http://127.0.0.1:8080",
  "login_hint": "this_is_an_opaque_string"
}

以下示例响应输出包含指向 OpenID Connect 提供程序的授权端点的 URI,以及身份验证请求的所有参数,作为 HTTP GET 参数

{
  "redirect" : "http://127.0.0.1:8080/c2id-login?login_hint=this_is_an_opaque_string&scope=openid&response_type=id_token&redirect_uri=https%3A%2F%2Fmy.fantastic.rp%2Fcb&state=4dbrihtIAt3wBTwo6DxK-vdk-sSyDBV8Yf0AjdkdT5I&nonce=WaBPH0KqPVdG5HHdSxPRjfoZbXMCicm5v1OiAj0DUFM&client_id=elasticsearch-rp",
  "state" : "4dbrihtIAt3wBTwo6DxK-vdk-sSyDBV8Yf0AjdkdT5I",
  "nonce" : "WaBPH0KqPVdG5HHdSxPRjfoZbXMCicm5v1OiAj0DUFM",
  "realm" : "oidc1"
}