このページの内容は Apigee と Apigee ハイブリッドに該当します。
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 のリストを取得するには、以下を使用します。
- メソッド: organizations.developers.apps.list デベロッパーに関連付けられているアプリのリストを取得できる API。
- メソッド: organizations.developers.apps.get アプリ ID を含むアプリの詳細を取得できる API。
アプリ エンドユーザー 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 |
ポリシーの内部名。 管理 UI プロキシ エディタで |
なし | 必須 |
continueOnError |
ポリシーが失敗したときにエラーを返す場合は、 ポリシーが失敗した後もフローの実行を続行する場合は、 |
false | 省略可 |
enabled |
ポリシーを適用するには、 ポリシーを無効にするには、 |
true | 省略可 |
<DisplayName> 要素
管理 UI プロキシ エディタで name
属性と一緒に使用して、ポリシーのラベルに使用する自然言語名を指定します。
<DisplayName>Policy Display Name</DisplayName>
デフォルト |
なし この要素を省略した場合、ポリシーの |
---|---|
要否 | 省略可 |
タイプ | 文字列 |
<AppId> 要素
取り消すトークンのデベロッパー アプリ ID を指定します。アプリ ID を格納する変数またはリテラルのアプリ ID を渡します。
<AppId>appIdString</AppId> or: <AppId ref="request.queryparam.app_id"></AppId>
デフォルト |
|
---|---|
プレゼンス |
省略可 |
タイプ | 文字列 |
有効な値 |
アプリ 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>
デフォルト |
|
---|---|
プレゼンス |
省略可 |
タイプ | 文字列 |
有効な値 |
ユーザー 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 | AppdId と EndUserId の両方を空にできません。 |
デプロイエラー
デプロイエラーについては、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>