トークンAPI
基本認証を必要とせずにアクセスするためのベアラートークンを作成します。
リクエスト
POST /_security/oauth2/token
前提条件
- このAPIを使用するには、
manage_token
クラスターの権限が必要です。
説明
トークンはElasticsearchトークンサービスによって作成され、HTTPインターフェースでTLSを構成すると自動的に有効になります。詳細はElasticsearchのHTTPクライアント通信を暗号化するを参照してください。あるいは、xpack.security.authc.token.enabled
設定を明示的に有効にすることもできます。運用モードで実行している場合、ブートストラップチェックにより、HTTPインターフェースでTLSを有効にしない限り、トークンサービスを有効にすることはできません。
トークン取得APIは、JSONリクエストボディの使用を除いて、典型的なOAuth 2.0トークンAPIと同じパラメータを受け取ります。
成功したトークン取得API呼び出しは、アクセストークン、トークンの有効期限(秒)、タイプ、および利用可能な場合はスコープを含むJSON構造を返します。
トークン取得APIによって返されるトークンは、有効な期間が限られており、その期間が過ぎると使用できなくなります。その期間はxpack.security.authc.token.timeout
設定によって定義されます。詳細については、トークンサービス設定を参照してください。
トークンを即座に無効にしたい場合は、トークン無効化APIを使用して行うことができます。
リクエストボディ
以下のパラメータは、POSTリクエストのボディに指定でき、トークンの作成に関連しています:
grant_type
- (必須、文字列)グラントのタイプ。サポートされているグラントタイプは:
password
、_kerberos
、client_credentials
、およびrefresh_token
です。client_credentials
- このグラントタイプはOAuth2のクライアント資格情報グラントを実装しています。これは機械間通信向けであり、自己サービスのユーザーによるトークンの作成には適していません。リフレッシュできないアクセストークンのみを生成します。
client_credentials
を使用するエンティティは、常に(クライアント、エンドユーザーではない)資格情報のセットにアクセスでき、自分自身を自由に認証できるという前提です。 _kerberos
- このグラントタイプは内部でサポートされており、SPNEGOベースのKerberosサポートを実装しています。
_kerberos
グラントタイプはバージョンごとに変更される可能性があります。 password
- このグラントタイプはOAuth2のリソースオーナーパスワード資格情報グラントを実装しています。このグラントでは、信頼されたクライアントがエンドユーザーの資格情報をアクセストークンと(場合によっては)リフレッシュトークンと交換します。リクエストは認証されたユーザーによって行われる必要がありますが、他の認証されたユーザー(リクエストパラメータとして渡される資格情報を持つユーザー)を代表して行われます。このグラントタイプは自己サービスのユーザーによるトークンの作成には適していません。
refresh_token
- このグラントタイプはOAuth2のリフレッシュトークングラントを実装しています。このグラントでは、ユーザーが以前発行されたリフレッシュトークンを新しいアクセストークンと新しいリフレッシュトークンと交換します。
password
- (オプション*、文字列)ユーザーのパスワード。
password
グラントタイプを指定する場合、このパラメータは必須です。このパラメータは他のサポートされているグラントタイプでは無効です。 kerberos_ticket
- (オプション*、文字列)base64エンコードされたKerberosチケット。
_kerberos
グラントタイプを指定する場合、このパラメータは必須です。このパラメータは他のサポートされているグラントタイプでは無効です。 refresh_token
- (オプション*、文字列)トークンを作成したときに返された文字列で、トークンの有効期限を延長することができます。
refresh_token
グラントタイプを指定する場合、このパラメータは必須です。このパラメータは他のサポートされているグラントタイプでは無効です。 scope
- (オプション、文字列)トークンのスコープ。現在、トークンはリクエストで送信された値に関係なく、
FULL
のスコープのみに発行されます。 username
- (オプション*、文字列)ユーザーを識別するユーザー名。
password
グラントタイプを指定する場合、このパラメータは必須です。このパラメータは他のサポートされているグラントタイプでは無効です。
例
以下の例は、認証されたユーザーとしてトークンを単純に作成するclient_credentials
グラントタイプを使用してトークンを取得します。
Python
resp = client.security.get_token(
grant_type="client_credentials",
)
print(resp)
Js
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
パラメータに渡されるユーザー名と同じであるかどうかにかかわらず、十分な権限を持つ認証されたユーザーによって行われる必要があります。
Python
resp = client.security.get_token(
grant_type="password",
username="test_admin",
password="x-pack-test-password",
)
print(resp)
Js
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
グラントタイプを使用して取得した既存のトークンの有効期限を延長するには、トークンの作成から24時間以内にリフレッシュトークンを使用してAPIを再度呼び出すことができます。例えば:
Python
resp = client.security.get_token(
grant_type="refresh_token",
refresh_token="vLBPvmAB6KvwvJZr27cS",
)
print(resp)
Js
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"
}
}
以下の例は、base64エンコードされたKerberosチケットと引き換えにトークンを単純に作成するkerberos
グラントタイプを使用してアクセストークンとリフレッシュトークンを取得します。
Js
POST /_security/oauth2/token
{
"grant_type" : "_kerberos",
"kerberos_ticket" : "YIIB6wYJKoZIhvcSAQICAQBuggHaMIIB1qADAgEFoQMCAQ6iBtaDcp4cdMODwOsIvmvdX//sye8NDJZ8Gstabor3MOGryBWyaJ1VxI4WBVZaSn1WnzE06Xy2"
}
Kerberos認証が成功した場合、APIは新しいトークンとリフレッシュトークンを返します。各リフレッシュトークンは一度だけ使用できます。相互認証がSpnego GSSコンテキストで要求される場合、サーバーはクライアントが消費し、認証を完了するためにkerberos_authentication_response_token
でbase64エンコードされたトークンを返します。
Js
{
"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"
}
}