Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›REST API ›Security APIs

API аннулирования токенов

Справочник по новым API

Для получения самых актуальных данных об API обратитесь к Security APIs.

Аннулирует один или несколько токенов доступа или токенов обновления.

Запрос

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

Наконец, следующий пример аннулирует все токены доступа и обновления для пользователя myuser в области saml1 немедленно:

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

Количество токенов, которые были аннулированы в рамках этого запроса.

Количество токенов, которые уже были аннулированы.

Количество ошибок, возникших при аннулировании токенов.

Подробности об этих ошибках. Это поле отсутствует в ответе, когда error_count равно 0.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/security-api-invalidate-token.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API