アクセス トークンの承認と取り消し

アクセス トークンと更新トークンの取り消し

たとえば、ユーザーが 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(必須、文字列): 指定された変数によって識別されるトークンタイプ。サポートされる値は、accesstokenrefreshtoken: です。
    • アクセス トークンを取り消す場合は、タイプ accesstoken を指定します。
    • アクセス トークンと更新トークンの両方を取り消す場合は、タイプ refreshtoken を指定します。タイプ refreshtoken が確認されると、Edge ではトークンが更新トークンであると見なされます。その更新トークンが見つかると、それが取り消されます。その更新トークンが見つからない場合、Edge はそれがアクセス トークンであるかどうかをチェックします。アクセス トークンが存在する場合は、それが取り消されます。

      注: すでに無効となっているトークンを InvalidateToken ポリシーに渡すと、ポリシーは、見込みどおりにエラーを返しません。そのようなオペレーションは効果がありません。
  • cascade(省略可、ブール値、デフォルト: true): この属性の主な用途は、関連するアクセス トークンを取り消さずに更新トークンを取り消すことです。次のような状況を考えてみましょう。
    • 更新トークンのみを取り消し、関連するアクセス トークンを取り消さない場合。これを行うには、<Token> タイプを refreshtoken に設定し、続けてカスケードを false に設定します。
    • アクセス トークンと更新トークンの両方を取り消す場合。これを行うには、<Token> タイプを accesstoken に設定します。カスケードの値は true(デフォルト)または false です。この値を true に設定すると、アクセス トークンと更新トークンの両方が取り消されます。false に設定すると、アクセス トークンが取り消され、更新トークンが使用できなくなります。詳細については、以下の注を参照してください。
    • アクセス トークンを取り消し、関連する更新トークンは取り消さない場合。サポートされていない詳細については、以下の注を参照してください。

注: セキュリティ上の理由から、アクセス トークンを取り消すと、関連する更新トークンも取り消されます。このため、カスケード属性を使用してアクセス トークンのみを取り消すことはできません。たとえば、<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(必須、文字列): 指定された変数によって識別されるトークンタイプ。サポートされる値は、accesstokenrefreshtoken です。
  • cascade(省略可、ブール値): デフォルトでは、このオプションは true に設定され、検証が関連するトークンに反映されます。このため、更新トークンに適用した場合、その関連トークンも有効化されます。アクセス トークンに適用した場合は、関連する更新トークンも有効化されます。これを false に設定した場合は、指定されたアクセス トークンまたは更新トークンのみが有効化されます。