トークン無効化API
1つ以上のアクセストークンまたはリフレッシュトークンを無効化します。
リクエスト
DELETE /_security/oauth2/token
説明
トークン取得APIによって返されるアクセストークンは、有効な期間が限られており、その期間が過ぎると使用できなくなります。その期間はxpack.security.authc.token.timeout
設定によって定義されています。詳細については、トークンサービス設定を参照してください。
トークン取得APIによって返されるリフレッシュトークンは、24時間のみ有効です。また、正確に1回だけ使用できます。
1つ以上のアクセストークンまたはリフレッシュトークンを即座に無効化したい場合は、このトークン無効化APIを使用してください。
リクエストボディ
DELETEリクエストのボディに指定できるパラメータは以下の通りで、トークンの無効化に関連しています:
token
- (オプション、文字列)アクセストークン。このパラメータは、
refresh_token
、realm_name
、またはusername
のいずれかが使用されている場合には使用できません。 refresh_token
- (オプション、文字列)リフレッシュトークン。このパラメータは、
refresh_token
、realm_name
、またはusername
のいずれかが使用されている場合には使用できません。 realm_name
- (オプション、文字列)認証レルムの名前。このパラメータは、
refresh_token
またはtoken
のいずれかと一緒に使用することはできません。 username
- (オプション、文字列)ユーザーのユーザー名。このパラメータは、
refresh_token
またはtoken
のいずれかと一緒に使用することはできません。
すべてのパラメータはオプションですが、少なくとも1つは必要です。具体的には、token
またはrefresh_token
のいずれかのパラメータが必要です。これらの2つのいずれも指定されていない場合は、realm_name
および/またはusername
を指定する必要があります。
レスポンスボディ
成功した呼び出しは、無効化されたトークンの数、すでに無効化されたトークンの数、特定のトークンを無効化する際に遭遇した可能性のあるエラーのリストを含むJSON構造を返します。
例
たとえば、次のように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"
}
トークン取得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"
}
}
このアクセストークンは、次の例のように即座に無効化できます:
Python
resp = client.security.invalidate_token(
token="dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==",
)
print(resp)
Js
const response = await client.security.invalidateToken({
token:
"dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==",
});
console.log(response);
コンソール
DELETE /_security/oauth2/token
{
"token" : "dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ=="
}
#### Python
``````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"
}
}
リフレッシュトークンも次の例のように即座に無効化できます:
Python
resp = client.security.invalidate_token(
refresh_token="vLBPvmAB6KvwvJZr27cS",
)
print(resp)
Js
const response = await client.security.invalidateToken({
refresh_token: "vLBPvmAB6KvwvJZr27cS",
});
console.log(response);
コンソール
DELETE /_security/oauth2/token
{
"refresh_token" : "vLBPvmAB6KvwvJZr27cS"
}
次の例は、saml1
レルムのすべてのアクセストークンとリフレッシュトークンを即座に無効化します:
Python
resp = client.security.invalidate_token(
realm_name="saml1",
)
print(resp)
Js
const response = await client.security.invalidateToken({
realm_name: "saml1",
});
console.log(response);
コンソール
DELETE /_security/oauth2/token
{
"realm_name" : "saml1"
}
次の例は、すべてのレルムでユーザーmyuser
のすべてのアクセストークンとリフレッシュトークンを即座に無効化します:
Python
resp = client.security.invalidate_token(
username="myuser",
)
print(resp)
Js
const response = await client.security.invalidateToken({
username: "myuser",
});
console.log(response);
コンソール
DELETE /_security/oauth2/token
{
"username" : "myuser"
}
最後に、次の例は、saml1
レルムでユーザーmyuser
のすべてのアクセストークンとリフレッシュトークンを即座に無効化します:
Python
resp = client.security.invalidate_token(
username="myuser",
realm_name="saml1",
)
print(resp)
Js
const response = await client.security.invalidateToken({
username: "myuser",
realm_name: "saml1",
});
console.log(response);
コンソール
DELETE /_security/oauth2/token
{
"username" : "myuser",
"realm_name" : "saml1"
}
Js
{
"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のときにはレスポンスに存在しません。 |