Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›REST API ›API безопасности

API получения токена

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

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

Создаёт токен доступа для доступа без необходимости базовой аутентификации.

Запрос

POST /_security/oauth2/token

Предварительные условия

  • Для использования этого API у вас должен быть manage_token привилегия кластера.

Описание

Токены создаются службой токенов Elasticsearch, которая автоматически включается при настройке TLS для HTTP-интерфейса. См. Зашифруйте HTTP-взаимодействия клиента с Elasticsearch. Кроме того, вы можете явно включить настройку xpack.security.authc.token.enabled. При работе в режиме производства проверка запуска предотвращает включение службы токенов, если вы не включили TLS для HTTP-интерфейса.

API получения токена принимает те же параметры, что и типичный API токенов OAuth 2.0, за исключением использования тела запроса в формате JSON.

Успешный вызов API получения токена возвращает JSON-структуру, содержащую токен доступа, время (в секундах) до истечения срока действия токена, тип и область, если она доступна.

Токены, возвращаемые API получения токена, имеют ограниченный срок действия, и после этого срока они больше не могут использоваться. Этот период времени определяется настройкой xpack.security.authc.token.timeout. Дополнительные сведения см. в Настройки службы токенов.

Если вы хотите немедленно аннулировать токен, вы можете сделать это, используя API аннулирования токена.

Тело запроса

В теле запроса POST можно указать следующие параметры, относящиеся к созданию токена:

grant_type

(Обязательный, строка) Тип гранта. Поддерживаемые типы грантов: password, _kerberos, client_credentials и refresh_token.

client_credentials
Этот тип гранта реализует грант Client Credentials OAuth2. Он предназначен для взаимодействия машина-машина и не подходит или не предназначен для самообслуживания создания токенов пользователем. Он генерирует только токены доступа, которые не могут быть обновлены. Предпосылка состоит в том, что сущность, использующая client_credentials, имеет постоянный доступ к набору (клиентских, не пользовательских) учетных данных и может аутентифицировать себя по своему желанию.
_kerberos
Этот тип гранта поддерживается внутренне и реализует поддержку Kerberos на основе SPNEGO. Тип гранта _kerberos может меняться от версии к версии.
password
Этот тип гранта реализует грант Resource Owner Password Credentials OAuth2. В этом гранте доверенный клиент обменивает учетные данные конечного пользователя на токен доступа и (возможно) токен обновления. Запрос должен быть сделан аутентифицированным пользователем, но происходит от имени другого аутентифицированного пользователя (учетные данные которого передаются в качестве параметров запроса). Этот тип гранта не подходит или не предназначен для самообслуживания создания токенов пользователем.
refresh_token
Этот тип гранта реализует грант Refresh Token OAuth2. В этом гранте пользователь обменивает ранее выданный токен обновления на новый токен доступа и новый токен обновления.
password
(Необязательно*, строка) Пароль пользователя. Если вы указываете тип гранта password, этот параметр является обязательным. Этот параметр недействителен для других поддерживаемых типов грантов.
kerberos_ticket
(Необязательно*, строка) Kerberos-билет в кодировке base64. Если вы указываете тип гранта _kerberos, этот параметр является обязательным. Этот параметр недействителен для других поддерживаемых типов грантов.
refresh_token
(Необязательно*, строка) Строка, возвращённая при создании токена, позволяющая продлить его срок действия. Если вы указываете тип гранта refresh_token, этот параметр является обязательным. Этот параметр недействителен для других поддерживаемых типов грантов.
scope
(Необязательно, строка) Область действия токена. В настоящее время токены выдаются только для области FULL независимо от значения, отправленного с запросом.
username
(Необязательно*, строка) Имя пользователя, идентифицирующее пользователя. Если вы указываете тип гранта password, этот параметр является обязательным. Этот параметр недействителен для других поддерживаемых типов грантов.

Примеры

В следующем примере получается токен, используя тип гранта 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"
}

Следующий пример вывода содержит токен доступа, время (в секундах) до истечения срока действия токена и тип:

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

Токен, возвращаемый этим API, может быть использован, отправив запрос с заголовком Authorization со значением, начинающимся с "Bearer " и далее со значением access_token.

curl -H "Authorization: Bearer dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==" http://localhost:9200/_cluster/health

В следующем примере получается токен для пользователя test_admin, используя тип гранта password. Этот запрос должен быть сделан аутентифицированным пользователем с достаточными привилегиями, которые могут быть или не быть такими же, как у пользователя, чьё имя пользователя передаётся в параметре username:

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

Следующий пример вывода содержит токен доступа, время (в секундах) до истечения срока действия токена, тип и токен обновления:

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

Для продления срока действия существующего токена, полученного с помощью типа гранта password, вы можете снова вызвать API с токеном обновления в течение 24 часов с момента создания токена. Например:

resp = client.security.get_token(
    grant_type="refresh_token",
    refresh_token="vLBPvmAB6KvwvJZr27cS",
)
print(resp)
const response = await client.security.getToken({
  grant_type: "refresh_token",
  refresh_token: "vLBPvmAB6KvwvJZr27cS",
});
console.log(response);
POST /_security/oauth2/token
{
  "grant_type": "refresh_token",
  "refresh_token": "vLBPvmAB6KvwvJZr27cS"
}

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

Следующий пример получает токен доступа и токен обновления, используя тип гранта kerberos, который просто создаёт токен в обмен на билет Kerberos в кодировке base64:

POST /_security/oauth2/token
{
  "grant_type" : "_kerberos",
  "kerberos_ticket" : "YIIB6wYJKoZIhvcSAQICAQBuggHaMIIB1qADAgEFoQMCAQ6iBtaDcp4cdMODwOsIvmvdX//sye8NDJZ8Gstabor3MOGryBWyaJ1VxI4WBVZaSn1WnzE06Xy2"
}

API вернёт новый токен и токен обновления, если Kerberos-аутентификация прошла успешно. Каждый токен обновления может быть использован только один раз. Когда взаимная аутентификация запрашивается в контексте GSS Spnego, сервер вернёт токен в кодировке base64 в kerberos_authentication_response_token для клиентов, чтобы они могли его обработать и завершить аутентификацию.

{
  "access_token" : "dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==",
  "type" : "Bearer",
  "expires_in" : 1200,
  "refresh_token": "vLBPvmAB6KvwvJZr27cS"
  "kerberos_authentication_response_token": "YIIB6wYJKoZIhvcSAQICAQBuggHaMIIB1qADAg",
  "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"
  }
}

© 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-get-token.html

Spec-Zone.ru

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