エンドユーザー ID、アプリ ID、またはその両方の OAuth 2.0 アクセス トークンを取り消す

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

Apigee Edge のドキュメントを表示する。

RevokeOAuthV2 ポリシーを使用して、エンドユーザー ID、アプリ ID、またはその両方によって OAuth 2.0 アクセス トークンを取り消すことができます。ここでのエンドユーザーとは、API を呼び出すアプリのユーザーを意味します。

ユーザー ID をアクセス トークンに格納するタイミング

デフォルトでは、ユーザー ID はアクセス トークンに含まれません。アクセス トークンにユーザー ID を格納すると便利な場合もあります。次に例を示します。

  • ユーザーがウェブサイトまたはアプリで認可済みのサードパーティ アプリを確認して、そのアプリに対するアクセス権を無効にできるようにする場合。
  • 認可済みユーザーが特定のデベロッパー アプリに関連付けられたアクセス トークンのすべてを無効にできるようにする場合。

OAuth アクセス トークンの概要

デフォルトでは、Apigee は次に示す形式で OAuth 2.0 アクセス トークンを生成します。

{
 "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 フィールドには、トークンに関連付けられているアプリの UUID が含まれます。アプリ ID の OAuth 2.0 アクセス トークンの取り消しを有効にする場合は、このアプリ ID を使用します。
  • access_token フィールドには OAuth 2.0 アクセス トークンの値が含まれます。
  • デフォルトの OAuth アクセス トークンには、エンドユーザー ID を格納するフィールドがありません。

エンドユーザー ID で OAuth 2.0 アクセス トークンを取り消すには、OAuth 2.0 ポリシーを構成してトークンにユーザー ID を含める必要があります。トークンにエンドユーザー ID が含まれるように、ポリシーを構成すると、以下に示すように、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 のトークンを取り消すには、まず OAuth 2.0 ポリシーを構成してユーザー ID をアクセス トークンに追加します。エンドユーザー ID をアクセス トークンに含めることで、エンドユーザー ID でトークンを取り消すことができます。

アクセス トークンにエンドユーザー ID を含めるようポリシーを構成するには、エンドユーザー ID を含む入力変数を指定する必要があります。<AppEndUser> タグを使用して、変数を指定します。

<OAuthV2 async="false" continueOnError="false" enabled="true" name="GenerateAccessTokenClient">
  <DisplayName>OAuth 2.0.0 1</DisplayName>
  <ExternalAuthorization>false</ExternalAuthorization>
  <Operation>GenerateAccessToken</Operation>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GenerateResponse enabled="true"/>
  <GrantType>request.queryparam.grant_type</GrantType>
  <AppEndUser>request.header.appuserID</AppEndUser>
  <ExpiresIn>960000</ExpiresIn>
</OAuthV2>

EndUserId によるアクセス権を取り消すように構成された 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>
    <EndUserId ref="request.header.appuserID"></EndUserId>
    <Cascade>false</Cascade>
</RevokeOAuthV2>

OAuth V2 ポリシーを取り消すもご覧ください。

次のコマンドの例では、トークンを生成し、appuserID ヘッダーでユーザー ID を渡します。

curl -H "appuserID:6ZG094fgnjNf02EK" \
-H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ" \
  -X POST "https://apitest.acme.com/oauth/token" \
  -d "grant_type=client_credentials"

別の方法では、リクエストの一部として情報を渡すことができます。たとえば、以下を使用します。

  • フォーム パラメータ変数 request.formparam.appuserID を使用する
  • エンドユーザー ID を提供するフロー変数を使用する