トークン無効化API

1つ以上のアクセストークンまたはリフレッシュトークンを無効化します。

リクエスト

DELETE /_security/oauth2/token

説明

トークン取得APIによって返されるアクセストークンは、有効な期間が限られており、その期間が過ぎると使用できなくなります。その期間はxpack.security.authc.token.timeout設定によって定義されています。詳細については、トークンサービス設定を参照してください。

トークン取得APIによって返されるリフレッシュトークンは、24時間のみ有効です。また、正確に1回だけ使用できます。

1つ以上のアクセストークンまたはリフレッシュトークンを即座に無効化したい場合は、このトークン無効化APIを使用してください。

リクエストボディ

DELETEリクエストのボディに指定できるパラメータは以下の通りで、トークンの無効化に関連しています:

  • token
  • (オプション、文字列)アクセストークン。このパラメータは、refresh_tokenrealm_name、またはusernameのいずれかが使用されている場合には使用できません。
  • refresh_token
  • (オプション、文字列)リフレッシュトークン。このパラメータは、refresh_tokenrealm_name、またはusernameのいずれかが使用されている場合には使用できません。
  • realm_name
  • (オプション、文字列)認証レルムの名前。このパラメータは、refresh_tokenまたはtokenのいずれかと一緒に使用することはできません。
  • username
  • (オプション、文字列)ユーザーのユーザー名。このパラメータは、refresh_tokenまたはtokenのいずれかと一緒に使用することはできません。

すべてのパラメータはオプションですが、少なくとも1つは必要です。具体的には、tokenまたはrefresh_tokenのいずれかのパラメータが必要です。これらの2つのいずれも指定されていない場合は、realm_nameおよび/またはusernameを指定する必要があります。

レスポンスボディ

成功した呼び出しは、無効化されたトークンの数、すでに無効化されたトークンの数、特定のトークンを無効化する際に遭遇した可能性のあるエラーのリストを含むJSON構造を返します。

たとえば、次のようにclient_credentialsグラントタイプを使用してトークンを作成した場合:

Python

  1. resp = client.security.get_token(
  2. grant_type="client_credentials",
  3. )
  4. print(resp)

Js

  1. const response = await client.security.getToken({
  2. grant_type: "client_credentials",
  3. });
  4. console.log(response);

コンソール

  1. POST /_security/oauth2/token
  2. {
  3. "grant_type" : "client_credentials"
  4. }

トークン取得APIは、アクセストークンに関する以下の情報を返します:

コンソール-結果

  1. {
  2. "access_token" : "dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==",
  3. "type" : "Bearer",
  4. "expires_in" : 1200,
  5. "authentication" : {
  6. "username" : "test_admin",
  7. "roles" : [
  8. "superuser"
  9. ],
  10. "full_name" : null,
  11. "email" : null,
  12. "metadata" : { },
  13. "enabled" : true,
  14. "authentication_realm" : {
  15. "name" : "file",
  16. "type" : "file"
  17. },
  18. "lookup_realm" : {
  19. "name" : "file",
  20. "type" : "file"
  21. },
  22. "authentication_type" : "realm"
  23. }
  24. }

このアクセストークンは、次の例のように即座に無効化できます:

Python

  1. resp = client.security.invalidate_token(
  2. token="dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==",
  3. )
  4. print(resp)

Js

  1. const response = await client.security.invalidateToken({
  2. token:
  3. "dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==",
  4. });
  5. console.log(response);

コンソール

  1. DELETE /_security/oauth2/token
  2. {
  3. "token" : "dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ=="
  4. }
  1. #### Python
  2. ``````python
  3. resp = client.security.get_token(
  4. grant_type="password",
  5. username="test_admin",
  6. password="x-pack-test-password",
  7. )
  8. print(resp)
  9. `

Js

  1. const response = await client.security.getToken({
  2. grant_type: "password",
  3. username: "test_admin",
  4. password: "x-pack-test-password",
  5. });
  6. console.log(response);

コンソール

  1. POST /_security/oauth2/token
  2. {
  3. "grant_type" : "password",
  4. "username" : "test_admin",
  5. "password" : "x-pack-test-password"
  6. }

トークン取得APIは、以下の情報を返します:

コンソール-結果

  1. {
  2. "access_token" : "dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==",
  3. "type" : "Bearer",
  4. "expires_in" : 1200,
  5. "refresh_token": "vLBPvmAB6KvwvJZr27cS",
  6. "authentication" : {
  7. "username" : "test_admin",
  8. "roles" : [
  9. "superuser"
  10. ],
  11. "full_name" : null,
  12. "email" : null,
  13. "metadata" : { },
  14. "enabled" : true,
  15. "authentication_realm" : {
  16. "name" : "file",
  17. "type" : "file"
  18. },
  19. "lookup_realm" : {
  20. "name" : "file",
  21. "type" : "file"
  22. },
  23. "authentication_type" : "realm"
  24. }
  25. }

リフレッシュトークンも次の例のように即座に無効化できます:

Python

  1. resp = client.security.invalidate_token(
  2. refresh_token="vLBPvmAB6KvwvJZr27cS",
  3. )
  4. print(resp)

Js

  1. const response = await client.security.invalidateToken({
  2. refresh_token: "vLBPvmAB6KvwvJZr27cS",
  3. });
  4. console.log(response);

コンソール

  1. DELETE /_security/oauth2/token
  2. {
  3. "refresh_token" : "vLBPvmAB6KvwvJZr27cS"
  4. }

次の例は、saml1レルムのすべてのアクセストークンとリフレッシュトークンを即座に無効化します:

Python

  1. resp = client.security.invalidate_token(
  2. realm_name="saml1",
  3. )
  4. print(resp)

Js

  1. const response = await client.security.invalidateToken({
  2. realm_name: "saml1",
  3. });
  4. console.log(response);

コンソール

  1. DELETE /_security/oauth2/token
  2. {
  3. "realm_name" : "saml1"
  4. }

次の例は、すべてのレルムでユーザーmyuserのすべてのアクセストークンとリフレッシュトークンを即座に無効化します:

Python

  1. resp = client.security.invalidate_token(
  2. username="myuser",
  3. )
  4. print(resp)

Js

  1. const response = await client.security.invalidateToken({
  2. username: "myuser",
  3. });
  4. console.log(response);

コンソール

  1. DELETE /_security/oauth2/token
  2. {
  3. "username" : "myuser"
  4. }

最後に、次の例は、saml1レルムでユーザーmyuserのすべてのアクセストークンとリフレッシュトークンを即座に無効化します:

Python

  1. resp = client.security.invalidate_token(
  2. username="myuser",
  3. realm_name="saml1",
  4. )
  5. print(resp)

Js

  1. const response = await client.security.invalidateToken({
  2. username: "myuser",
  3. realm_name: "saml1",
  4. });
  5. console.log(response);

コンソール

  1. DELETE /_security/oauth2/token
  2. {
  3. "username" : "myuser",
  4. "realm_name" : "saml1"
  5. }

Js

  1. {
  2. "invalidated_tokens":9,
  3. "previously_invalidated_tokens":15,
  4. "error_count":2,
  5. "error_details":[
  6. {
  7. "type":"exception",
  8. "reason":"Elasticsearch exception [type=exception, reason=foo]",
  9. "caused_by":{
  10. "type":"exception",
  11. "reason":"Elasticsearch exception [type=illegal_argument_exception, reason=bar]"
  12. }
  13. },
  14. {
  15. "type":"exception",
  16. "reason":"Elasticsearch exception [type=exception, reason=boo]",
  17. "caused_by":{
  18. "type":"exception",
  19. "reason":"Elasticsearch exception [type=illegal_argument_exception, reason=far]"
  20. }
  21. }
  22. ]
  23. }
このリクエストの一部として無効化されたトークンの数。
すでに無効化されたトークンの数。
トークンを無効化する際に遭遇したエラーの数。
これらのエラーに関する詳細。このフィールドは、error_countが0のときにはレスポンスに存在しません。