アクセス トークンと更新トークンの取り消し
たとえば、ユーザーが OAuth 対応アプリからログアウトした場合など、場合によってはアプリによる明示的なトークンの取り消しや無効化が必要になることがあります。トークンを取り消した場合、有効期限内であればいつでも再承認できます。
トークン取り消しの手順は、OAuth 2.0 トークン取り消し仕様で定義されています。
Apigee Edge は、専用のトークン取り消しエンドポイントを構成できる InvalidateToken オペレーションを提供しています。このエンドポイントの URI を公開することで、アプリケーションのデベロッパーは Edge により発行されたトークンを無効化できます。
次に、OAuthV2 ポリシーと InvalidateToken オペレーションの構成例を紹介します。この例では、アクセス トークンとそれに関連する更新トークンの両方が取り消されます。技術的には、カスケード フラグが true に設定されているために、両方が取り消されます。カスケード フラグの機能の詳細については、後述の Token 要素の属性セクションをご覧ください。
<OAuthV2 name="InvalidateToken"> <Operation>InvalidateToken</Operation> <Tokens> <Token type="accesstoken" cascade="true">flow.variable</Token> </Tokens> </OAuthV2>
<Tokens> /<Token> 要素
取り消し対象のトークンを指定するフロー変数を指定します。たとえば、デベロッパーが access_token
という名前のクエリ パラメータを使用して取り消しリクエストを送信する場合、正しいフロー変数は request.queryparam.access_token
になります。たとえば、HTTP ヘッダーでトークンを要求するには、この値を request.header.access_token
に設定します。
属性
-
type
(必須、文字列): 指定された変数によって識別されるトークンタイプ。サポートされる値は、accesstoken
とrefreshtoken:
です。- アクセス トークンを取り消す場合は、タイプ accesstoken を指定します。
- アクセス トークンと更新トークンの両方を取り消す場合は、タイプ refreshtoken を指定します。タイプ refreshtoken が確認されると、Edge ではトークンが更新トークンであると見なされます。その更新トークンが見つかると、それが取り消されます。その更新トークンが見つからない場合、Edge はそれがアクセス トークンであるかどうかをチェックします。アクセス トークンが存在する場合は、それが取り消されます。
注: すでに無効となっているトークンを InvalidateToken ポリシーに渡すと、ポリシーは、見込みどおりにエラーを返しません。そのようなオペレーションは効果がありません。
-
cascade
(省略可、ブール値、デフォルト: true): この属性の主な用途は、関連するアクセス トークンを取り消さずに更新トークンを取り消すことです。次のような状況を考えてみましょう。- 更新トークンのみを取り消し、関連するアクセス トークンを取り消さない場合。これを行うには、<Token> タイプを
refreshtoken
に設定し、続けてカスケードをfalse
に設定します。 - アクセス トークンと更新トークンの両方を取り消す場合。これを行うには、<Token> タイプを
accesstoken
に設定します。カスケードの値はtrue
(デフォルト)またはfalse
です。この値をtrue
に設定すると、アクセス トークンと更新トークンの両方が取り消されます。false
に設定すると、アクセス トークンが取り消され、更新トークンが使用できなくなります。詳細については、以下の注を参照してください。 - アクセス トークンを取り消し、関連する更新トークンは取り消さない場合。サポートされていない詳細については、以下の注を参照してください。
- 更新トークンのみを取り消し、関連するアクセス トークンを取り消さない場合。これを行うには、<Token> タイプを
注: セキュリティ上の理由から、アクセス トークンを取り消すと、関連する更新トークンも取り消されます。このため、カスケード属性を使用してアクセス トークンのみを取り消すことはできません。たとえば、<Token> タイプを accesstoken
に設定して cascade=false
を設定すると、アクセス トークンが(予測どおり)取り消されますが、関連の更新トークンは使用できなくなります。更新トークンを、取り消されたアクセス トークンの更新に使用することはできません。カスケード属性の主な用途は、更新トークンのみを取り消す必要がある場合です。その場合、<Token> タイプを refreshtoken
に設定し、cascade=false
を設定します。更新トークンは取り消されますが、関連するアクセス トークンは有効姓が保持されます(有効期限が切れるか、取り消されるまで)。詳細は、こちらのコミュニティ フォーラムのディスカッションをご覧ください。
アクセス トークンと更新トークンの承認
ValidateToken オペレーションは、取り消されたトークンの「再承認」に使用されます。つまり、このオペレーションを適用すると、対象のアクセス トークンや更新トークンのステータスが「取り消し済み」から「承認済み」に変更されます。すでに有効期限が切れている取り消し済みトークンを有効にできます。
<OAuthV2 name="ValidateToken"> <Operation>ValidateToken</Operation> <Tokens> <Token type="refreshtoken" cascade="true">flow.variable</Token> </Tokens> </OAuthV2>
<Tokens> /<Token> 要素
有効にするトークンを指定するフロー変数を指定します。たとえば、デベロッパーが access_token
という名前のクエリ パラメータを使用して検証リクエストを送信する場合、正しいフロー変数は request.queryparam.access_token
になります。たとえば、HTTP ヘッダーでトークンを要求するには、この値を request.header.access_token
に設定します。
属性
type
(必須、文字列): 指定された変数によって識別されるトークンタイプ。サポートされる値は、accesstoken
とrefreshtoken
です。cascade
(省略可、ブール値): デフォルトでは、このオプションはtrue
に設定され、検証が関連するトークンに反映されます。このため、更新トークンに適用した場合、その関連トークンも有効化されます。アクセス トークンに適用した場合は、関連する更新トークンも有効化されます。これをfalse
に設定した場合は、指定されたアクセス トークンまたは更新トークンのみが有効化されます。