API получения токена
Создаёт токен типа bearer для доступа без необходимости базовой аутентификации.
Запрос
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 Grant OAuth2. Он предназначен для взаимодействия «машина-машина» и не подходит для самообслуживающего создания токенов пользователем. Он генерирует только токены доступа, которые нельзя обновить. Предполагается, что сущность, использующая
client_credentials, имеет постоянный доступ к набору (клиентских, а не пользовательских) учетных данных и может аутентифицировать себя по желанию. -
_kerberos - Этот тип запроса поддерживается внутренне и реализует поддержку Kerberos на основе SPNEGO. Тип запроса
_kerberosможет меняться от версии к версии. -
password - Этот тип запроса реализует метод Resource Owner Password Credentials Grant OAuth2. В этом методе доверенный клиент обменивает учетные данные конечного пользователя на токен доступа и (возможно) токен обновления. Запрос должен быть выполнен аутентифицированным пользователем, но выполняется от имени другого аутентифицированного пользователя (чьи учетные данные передаются в качестве параметров запроса). Этот тип запроса не подходит для самообслуживающего создания токенов пользователем.
-
refresh_token - Этот тип запроса реализует метод Refresh Token Grant OAuth2. В этом методе пользователь обменивает ранее выданный токен обновления на новый токен доступа и новый токен обновления.
-
-
password - (Необязательный*, строка) Пароль пользователя. Если вы указываете тип запроса
password, этот параметр является обязательным. Этот параметр недействителен для других поддерживаемых типов запросов. -
kerberos_ticket - (Необязательный*, строка) Кэрберсовский билет, закодированный в base64. Если вы указываете тип запроса
_kerberos, этот параметр является обязательным. Этот параметр недействителен для других поддерживаемых типов запросов. -
refresh_token - (Необязательный*, строка) Строка, возвращённая при создании токена, которая позволяет продлить его срок действия. Если вы указываете тип запроса
refresh_token, этот параметр является обязательным. Этот параметр недействителен для других поддерживаемых типов запросов. -
scope - (Необязательный, строка) Область действия токена. В настоящее время токены выдаются только для области
FULLнезависимо от значения, отправленного с запросом. -
username - (Необязательный*, строка) Имя пользователя, идентифицирующее пользователя. Если вы указываете тип запроса
password, этот параметр является обязательным. Этот параметр недействителен для других поддерживаемых типов запросов.
Примеры
Следующий пример получает токен, используя тип запроса client_credentials, который просто создаёт токен от имени аутентифицированного пользователя:
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:
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 часов с момента создания токена. Например:
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 вернёт новый токен и новый токен обновления, если кэрберсовская аутентификация успешна. Каждый токен обновления может быть использован только один раз. Когда взаимная аутентификация запрошена в контексте Spnego GSS, сервер вернёт билет, закодированный в 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/7.17/security-api-get-token.html