使令牌失效 API
编辑使令牌失效 API
编辑使一个或多个访问令牌或刷新令牌失效。
请求
编辑DELETE /_security/oauth2/token
描述
编辑由 获取令牌 API 返回的访问令牌具有有限的有效期限,超过该期限后,它们将不再可用。该时间段由 xpack.security.authc.token.timeout
设置定义。有关更多信息,请参阅令牌服务设置。
由 获取令牌 API 返回的刷新令牌仅在 24 小时内有效。它们也只能使用一次。
如果要立即使一个或多个访问令牌或刷新令牌失效,请使用此使令牌失效 API。
请求主体
编辑以下参数可以在 DELETE 请求的主体中指定,并与使令牌失效相关
-
token
- (可选,字符串) 访问令牌。如果使用
refresh_token
、realm_name
或username
中的任何一个,则不能使用此参数。 -
refresh_token
- (可选,字符串) 刷新令牌。如果使用
refresh_token
、realm_name
或username
中的任何一个,则不能使用此参数。 -
realm_name
- (可选,字符串) 身份验证域的名称。此参数不能与
refresh_token
或token
一起使用。 -
username
- (可选,字符串) 用户的用户名。此参数不能与
refresh_token
或token
一起使用
虽然所有参数都是可选的,但至少需要其中一个。更具体地说,需要 token
或 refresh_token
参数中的一个。如果未指定这两个参数中的任何一个,则需要指定 realm_name
和/或 username
。
响应主体
编辑成功的调用将返回一个 JSON 结构,其中包含已失效的令牌数、已失效的令牌数以及在使特定令牌失效时可能遇到的错误列表。
示例
编辑例如,如果使用 client_credentials
授权类型创建令牌,如下所示
resp = client.security.get_token( grant_type="client_credentials", ) print(resp)
const response = await client.security.getToken({ grant_type: "client_credentials", }); console.log(response);
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" } }
此访问令牌现在可以立即失效,如以下示例所示
resp = client.security.invalidate_token( token="dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==", ) print(resp)
const response = await client.security.invalidateToken({ token: "dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==", }); console.log(response);
DELETE /_security/oauth2/token { "token" : "dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==" }
如果使用 password
授权类型获取用户的令牌,则响应也可能包含刷新令牌。例如
resp = client.security.get_token( grant_type="password", username="test_admin", password="x-pack-test-password", ) print(resp)
const response = await client.security.getToken({ grant_type: "password", username: "test_admin", password: "x-pack-test-password", }); console.log(response);
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" } }
刷新令牌现在也可以立即失效,如以下示例所示
resp = client.security.invalidate_token( refresh_token="vLBPvmAB6KvwvJZr27cS", ) print(resp)
const response = await client.security.invalidateToken({ refresh_token: "vLBPvmAB6KvwvJZr27cS", }); console.log(response);
DELETE /_security/oauth2/token { "refresh_token" : "vLBPvmAB6KvwvJZr27cS" }
以下示例立即使 saml1
域的所有访问令牌和刷新令牌失效
resp = client.security.invalidate_token( realm_name="saml1", ) print(resp)
const response = await client.security.invalidateToken({ realm_name: "saml1", }); console.log(response);
DELETE /_security/oauth2/token { "realm_name" : "saml1" }
以下示例立即使所有域中用户 myuser
的所有访问令牌和刷新令牌失效
resp = client.security.invalidate_token( username="myuser", ) print(resp)
const response = await client.security.invalidateToken({ username: "myuser", }); console.log(response);
DELETE /_security/oauth2/token { "username" : "myuser" }
最后,以下示例立即使 saml1
域中用户 myuser
的所有访问令牌和刷新令牌失效
resp = client.security.invalidate_token( username="myuser", realm_name="saml1", ) print(resp)
const response = await client.security.invalidateToken({ username: "myuser", realm_name: "saml1", }); console.log(response);
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]" } } ] }