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

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

たとえば、ユーザーが 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 に設定した場合は、指定されたアクセス トークンまたは更新トークンのみが有効化されます。