OAuth V2 ポリシーを取り消す

このページの内容は ApigeeApigee ハイブリッドに該当します。

Apigee Edge のドキュメントはこちらをご覧ください。

ポリシー アイコン

概要

デベロッパー アプリ ID またはアプリのエンドユーザー ID または両方に関連付けられた OAuth2 アクセス トークンを取り消します。

このポリシーは拡張可能なポリシーであり、Apigee ライセンスによっては、このポリシーの使用によって費用や使用率に影響する場合があります。ポリシータイプと使用量への影響については、ポリシータイプをご覧ください。

OAuthv2 ポリシーを使用して、OAuth 2.0 アクセス トークンを生成します。Apigee で生成されるトークンの形式は次のとおりです。

{
  "issued_at" : "1421847736581",
  "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
  "scope" : "READ",
  "status" : "approved",
  "api_product_list" : "[PremiumWeatherAPI]",
  "expires_in" : "3599", //--in seconds
  "developer.email" : "tesla@weathersample.com",
  "organization_id" : "0",
  "token_type" : "BearerToken",
  "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP",
  "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL",
  "organization_name" : "myorg",
  "refresh_token_expires_in" : "0", //--in seconds
  "refresh_count" : "0"
}

application_name 要素には、トークンに関連付けられているデベロッパー アプリ ID が含まれます。

デフォルトでは、Apigee のトークンにエンドユーザー ID が含まれません。エンドユーザー ID が含まれるように Apigee を構成するには、<AppEndUser> 要素を OAuthv2 ポリシーに追加します。

<OAuthV2 name="GenerateAccessTokenClient">
    <Operation>GenerateAccessToken</Operation>
    ...
    <AppEndUser>request.queryparam.app_enduser</AppEndUser>
</OAuthV2>

この例では、エンドユーザー ID を app_enduser という名前のクエリ パラメータの OAuthv2 ポリシーに渡しています。こうすることで、エンドユーザー ID は、app_enduser 要素のトークンに含まれるようになります。

{
 "issued_at" : "1421847736581",
 "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
 "scope" : "READ",
 "app_enduser" : "6ZG094fgnjNf02EK",
 "status" : "approved",
 "api_product_list" : "[PremiumWeatherAPI]",
 "expires_in" : "3599", //--in seconds
 "developer.email" : "tesla@weathersample.com",
 "organization_id" : "0",
 "token_type" : "BearerToken",
 "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP",
 "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL",
 "organization_name" : "myorg",
 "refresh_token_expires_in" : "0", //--in seconds
 "refresh_count" : "0"
}

デベロッパー アプリ ID により取り消す

デベロッパー アプリ ID に関連付けられた OAuth2 アクセス トークンを取り消します。 Apigee によって生成されたすべての OAuth2 アクセス トークンには、そのトークンに関連付けられているデベロッパー アプリの ID が含まれます。そのため、そのアプリ ID に基づいてトークンを取り消すことができます。

特定のデベロッパーのアプリ ID のリストを取得するには、以下を使用します。

アプリ エンドユーザー ID により取り消す

特定のアプリのエンドユーザー ID に関連付けられた OAuth2 アクセス トークンを取り消します。これは、トークンが発行されたユーザーの ID に関連付けられたトークンです。

デフォルトでは、OAuth アクセス トークンにはエンドユーザー ID のフィールドはありません。エンドユーザー ID により OAuth 2.0 アクセス トークンを取り消せるようにするには、上で説明するように、OAuthv2 ポリシーを構成してトークンにユーザー ID を組み込む必要があります。

アプリのエンドユーザー ID を取得するには、メソッド: organizations.developers.get を使用します。

サンプル

以下のサンプルでは、Revoke OAuth V2 ポリシーを使用して、OAuth2 アクセス トークンを取り消しています。

デベロッパー アプリ ID

デベロッパー アプリ ID でアクセス トークンを取り消すには、ポリシーで <AppId> 要素を使用します。

次の例では、app_id というクエリ パラメータで、アクセス トークンのデベロッパー アプリ ID を検索します。

<RevokeOAuthV2 continueOnError="false" enabled="true" name="MyRevokeTokenPolicy">
  <DisplayName>Revoke OAuth v2.0-1</DisplayName>
  <AppId ref="request.queryparam.app_id"></AppId>
</RevokeOAuthV2>

デベロッパー アプリの ID を指定すると、ポリシーによってアクセス トークンが取り消されます。

タイムスタンプより前を指定して取り消す

特定の日時より前に生成されたデベロッパー アプリ ID によってアクセス トークンを取り消すには、ポリシーで <RevokeBeforeTimestamp> 要素を使用します。<RevokeBeforeTimestamp> は、UTC エポック時間をミリ秒単位で指定します。この時間より前に発行されたトークンはすべて取り消されます。

次の例では、2019 年 7 月 1 日より前に作成されたデベロッパー アプリのアクセス トークンを取り消します。

<RevokeOAuthV2 continueOnError="false" enabled="true" name="MyRevokeTokenPolicy">
  <DisplayName>Revoke OAuth v2.0-1</DisplayName>
  <AppId ref="request.queryparam.app_id"></AppId>
  <RevokeBeforeTimestamp>1561939200000</RevokeBeforeTimestamp>
</RevokeOAuthV2>

<RevokeBeforeTimestamp> 要素は、1970 年 1 月 1 日午前 0 時(UTC)からの経過時間(ミリ秒)を表す 64 ビット(long 型)の整数の値を取ります。


要素リファレンス

要素リファレンスは、RevokeOAuthV2 ポリシーの要素と属性を記述しています。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RevokeOAuthV2 continueOnError="false" enabled="true" name="GetOAuthV2Info-1">
  <DisplayName>Get OAuth v2.0 Info 1</DisplayName>
  <AppId ref="variable"></AppId>
  <EndUserId ref="variable"></EndUserId>
  <RevokeBeforeTimestamp ref="variable"></RevokeBeforeTimestamp>
  <Cascade>false</Cascade>
</RevokeOAuthV2>

<RevokeOAuthV2> 属性

<RevokeOAuthV2 continueOnError="false" enabled="true" name="Revoke-OAuth-v20-1">

次の表に、すべてのポリシーの親要素に共通する属性を示します。

属性 説明 デフォルト 要否
name

ポリシーの内部名。name 属性の値には、英字、数字、スペース、ハイフン、アンダースコア、ピリオドを使用できます。この値は 255 文字を超えることはできません。

管理 UI プロキシ エディタで <DisplayName> 要素を追加して、ポリシーのラベルに使用する別の自然言語名を指定することもできます。

なし 必須
continueOnError

ポリシーが失敗したときにエラーを返す場合は、false に設定します。これは、ほとんどのポリシーで想定される動作です。

ポリシーが失敗した後もフローの実行を続行する場合は、true に設定します。

false 省略可
enabled

ポリシーを適用するには、true に設定します。

ポリシーを無効にするには、false に設定します。ポリシーがフローに接続されている場合でも適用されません。

true 省略可

<DisplayName> 要素

管理 UI プロキシ エディタで name 属性と一緒に使用して、ポリシーのラベルに使用する自然言語名を指定します。

<DisplayName>Policy Display Name</DisplayName>
デフォルト

なし

この要素を省略した場合、ポリシーの name 属性の値が使用されます。

要否 省略可
タイプ 文字列

<AppId> 要素

取り消すトークンのデベロッパー アプリ ID を指定します。アプリ ID を格納する変数またはリテラルのアプリ ID を渡します。

<AppId>appIdString</AppId>

or:

<AppId ref="request.queryparam.app_id"></AppId>
デフォルト

request.formparam.app_id(x-www-form-urlencoded、リクエスト本文で指定)

プレゼンス

省略可

タイプ 文字列
有効な値

アプリ ID 文字列を含むフロー変数、またはリテラル文字列のどちらか

<Cascade> 要素

true であり、従来の不透明アクセス トークンがある場合、<AppId> または <EndUserId> のいずれかが一致すると、更新トークンとアクセス トークンの両方が取り消されます。JWT アクセス トークンがある場合、アクセス トークンで発行された更新トークンのみが取り消されます。設計上、JWT アクセス トークンを取り消すことはできません。false の場合、アクセス トークンのみが取り消され、更新トークンは変更されません。不透明アクセス トークンにも同じ動作が適用されます。JWT アクセス トークンを取り消すことはできません。

<Cascade>false<Cascade>
デフォルト

false

要否

省略可

ブール値
有効な値 true または false

<EndUserId> 要素

取り消すトークンのアプリ エンドユーザー ID を指定します。ユーザー ID を格納する変数またはリテラルのトークン文字列を渡します。

<EndUserId>userIdString</EndUserId>

or:

<EndUserId ref="request.queryparam.access_token"></EndUserId>
デフォルト

request.formparam.enduser_id(x-www-form-urlencoded、リクエスト本文で指定)

プレゼンス

省略可

タイプ 文字列
有効な値

ユーザー ID またはリテラル文字列を含むフロー変数のどちらか。

<RevokeBeforeTimestamp> 要素

タイムスタンプの前に発行されたトークンを取り消します。この要素は <AppId> および <EndUserId> と連携するため、特定の時間より前のトークンを取り消すことができます。デフォルト値はポリシーが実行される時刻です。

<RevokeBeforeTimestamp>timeStampString</RevokeBeforeTimestamp>

or:

<RevokeBeforeTimestamp ref="request.queryparam.revoke_since_timestamp"></RevokeBeforeTimestamp>
デフォルト

ポリシーが実行されるタイムスタンプ

プレゼンス

省略可

1970 年 1 月 1 日の午前 0 時からの経過時間(ミリ秒)を表す 64 ビット(long 型)の整数。
有効な値

タイムスタンプを含むフロー変数、またはリテラルのタイムスタンプ。 タイムスタンプは未来、または 2014 年 1 月 1 日より前にすることはできません。

フロー変数

RevokeOAuthV2 ポリシーではフロー変数は設定されません。

エラー リファレンス

このセクションでは、このポリシーによってエラーがトリガーされたときに返される障害コードとエラー メッセージ、Apigee によって設定される障害変数について説明します。これは、障害に対処する障害ルールを作成するうえで重要な情報です。詳細については、ポリシーエラーについて知っておくべきこと障害の処理をご覧ください。

ランタイム エラー

このエラーは、ポリシーの実行時に発生することがあります。以下のエラー名は、エラーが発生したときに fault.name 変数に割り当てられる文字列です。詳細については、以下の障害変数のセクションをご覧ください。

障害コード HTTP ステータス 原因
steps.oauth.v2.InvalidFutureTimestamp 500 タイムスタンプに未来の日付を指定することはできません。
steps.oauth.v2.InvalidEarlyTimestamp 500 タイムスタンプは 2014 年 1 月 1 日より前の日付にできません。
steps.oauth.v2.InvalidTimestamp 500 タイムスタンプが無効です。
steps.oauth.v2.EmptyAppAndEndUserId 500 AppdIdEndUserId の両方を空にできません。

デプロイエラー

デプロイエラーについては、UI で報告されるメッセージを参照してください。

障害変数

次の変数は、このポリシーでランタイム エラーが発生したときに設定されます。

変数 説明
fault.name="fault_name" fault_name は、上記のランタイム エラーの表に記載されている障害の名前です。障害名は、障害コードの最後の部分です。 fault.name Matches "IPDeniedAccess"
oauthV2.policy_name.failed policy_name は、障害が発生したポリシーのユーザー指定の名前です。 oauthV2.GetTokenInfo.failed = true
oauthV2.policy_name.fault.name policy_name は、障害が発生したポリシーのユーザー指定の名前です。 oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id
oauthV2.policy_name.fault.cause policy_name は、障害が発生したポリシーのユーザー指定の名前です。 oauthV2.GetTokenInfo.cause = ClientID is Invalid

エラー レスポンスの例

{
   "fault":{
      "faultstring":"Timestamp is in the future.",
      "detail":{
         "errorcode":"steps.oauth.v2.InvalidFutureTimestamp"
      }
   }
}

障害ルールの例

<FaultRule name="RevokeOAuthV2 Faults">
    <Step>
        <Name>AM-InvalidTimestamp</Name>
    </Step>
    <Condition>(fault.name = "InvalidFutureTimestamp")</Condition>
</FaultRule>

関連トピック