失效令牌 API编辑

使一个或多个访问令牌或刷新令牌失效。

请求编辑

DELETE /_security/oauth2/token

描述编辑

获取令牌 API 返回的访问令牌的有效期是有限的,超过该时间段后,它们将无法再使用。该时间段由 xpack.security.authc.token.timeout 设置定义。有关更多信息,请参阅令牌服务设置

获取令牌 API 返回的刷新令牌仅在 24 小时内有效。它们也只能使用一次。

如果要立即使一个或多个访问令牌或刷新令牌失效,请使用此失效令牌 API。

请求正文编辑

以下参数可以在 DELETE 请求的正文中指定,并与失效令牌相关

token
(可选,字符串)访问令牌。如果使用了 refresh_tokenrealm_nameusername 中的任何一个,则不能使用此参数。
refresh_token
(可选,字符串)刷新令牌。如果使用了 refresh_tokenrealm_nameusername 中的任何一个,则不能使用此参数。
realm_name
(可选,字符串)身份验证领域的名称。此参数不能与 refresh_tokentoken 一起使用。
username
(可选,字符串)用户的用户名。此参数不能与 refresh_tokentoken 一起使用

虽然所有参数都是可选的,但至少需要其中一个。更具体地说,需要 tokenrefresh_token 参数之一。如果这两个参数都没有指定,则需要指定 realm_name 和/或 username

响应正文编辑

成功的调用将返回一个 JSON 结构,其中包含已失效的令牌数量、已失效的令牌数量,以及在使特定令牌失效时可能遇到的错误列表。

示例编辑

例如,如果您使用 client_credentials 授权类型创建令牌,如下所示

POST /_security/oauth2/token
{
  "grant_type" : "client_credentials"
}

获取令牌 API 返回有关访问令牌的以下信息

{
  "access_token" : "dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==",
  "type" : "Bearer",
  "expires_in" : 1200,
  "authentication" : {
    "username" : "test_admin",
    "roles" : [
      "superuser"
      ],
    "full_name" : null,
    "email" : null,
    "metadata" : { },
    "enabled" : true,
    "authentication_realm" : {
      "name" : "file",
      "type" : "file"
      },
    "lookup_realm" : {
      "name" : "file",
      "type" : "file"
      },
    "authentication_type" : "realm"
  }
}

现在可以立即使此访问令牌失效,如以下示例所示

DELETE /_security/oauth2/token
{
  "token" : "dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ=="
}

如果您使用 password 授权类型获取用户的令牌,则响应中可能还包含刷新令牌。例如

POST /_security/oauth2/token
{
  "grant_type" : "password",
  "username" : "test_admin",
  "password" : "x-pack-test-password"
}

获取令牌 API 返回以下信息

{
  "access_token" : "dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==",
  "type" : "Bearer",
  "expires_in" : 1200,
  "refresh_token": "vLBPvmAB6KvwvJZr27cS",
  "authentication" : {
    "username" : "test_admin",
    "roles" : [
      "superuser"
      ],
    "full_name" : null,
    "email" : null,
    "metadata" : { },
    "enabled" : true,
    "authentication_realm" : {
      "name" : "file",
      "type" : "file"
      },
    "lookup_realm" : {
      "name" : "file",
      "type" : "file"
      },
    "authentication_type" : "realm"
  }
}

现在也可以立即使刷新令牌失效,如以下示例所示

DELETE /_security/oauth2/token
{
  "refresh_token" : "vLBPvmAB6KvwvJZr27cS"
}

以下示例立即使 saml1 领域的所有访问令牌和刷新令牌失效

DELETE /_security/oauth2/token
{
  "realm_name" : "saml1"
}

以下示例立即使所有领域中用户 myuser 的所有访问令牌和刷新令牌失效

DELETE /_security/oauth2/token
{
  "username" : "myuser"
}

最后,以下示例立即使 saml1 领域中用户 myuser 的所有访问令牌和刷新令牌失效

DELETE /_security/oauth2/token
{
  "username" : "myuser",
  "realm_name" : "saml1"
}
{
  "invalidated_tokens":9, 
  "previously_invalidated_tokens":15, 
  "error_count":2, 
  "error_details":[ 
    {
      "type":"exception",
      "reason":"Elasticsearch exception [type=exception, reason=foo]",
      "caused_by":{
        "type":"exception",
        "reason":"Elasticsearch exception [type=illegal_argument_exception, reason=bar]"
      }
    },
    {
      "type":"exception",
      "reason":"Elasticsearch exception [type=exception, reason=boo]",
      "caused_by":{
        "type":"exception",
        "reason":"Elasticsearch exception [type=illegal_argument_exception, reason=far]"
      }
    }
  ]
}

作为此请求的一部分而失效的令牌数量。

已失效的令牌数量。

使令牌失效时遇到的错误数量。

有关这些错误的详细信息。当 error_count 为 0 时,响应中不存在此字段。