ユーザー ID とアプリ ID による OAuth 2.0 トークンへのアクセスを有効にする

Edge for Private Cloud v. 4.16.09

このドキュメントでは、エンドユーザー ID、アプリ ID、またはその両方を使用して OAuth 2.0 アクセス トークンの取得と取り消しを可能にする方法について説明します。

アプリ ID は OAuth アクセス トークンに自動的に追加されます。したがって、以下の手順で組織のトークン アクセスを有効にすると、アプリ ID でトークンにアクセスできます。

エンドユーザー ID で OAuth 2.0 アクセス トークンを取得して取り消すには、アクセス トークンにエンドユーザー ID が存在する必要があります。以下の手順では、既存のトークンまたは新しいトークンにエンドユーザー ID を追加する方法について説明します。

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

{
  "issued_at" : "1421847736581",
  "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
  "scope" : "READ",
  "status" : "approved",
  "api_product_list" : "[PremiumWeatherAPI]",
  "expires_in" : "3599",
  "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",
  "refresh_count" : "0"
}

次の点にご留意ください。

  • application_name フィールドには、トークンに関連付けられているアプリの UUID が含まれます。アプリ ID の OAuth 2.0 アクセス トークンの取得と取り消しを有効にする場合は、このアプリ ID を使用します。
  • access_token フィールドには OAuth 2.0 アクセス トークンの値が含まれます。

エンドユーザー ID で OAuth 2.0 アクセス トークンの取得と取り消しを有効にするには、以下の手順で説明するように、OAuth 2.0 ポリシーを構成してトークンにユーザー ID を含めます。

エンドユーザー ID は、Edge がデベロッパー ID として使用する文字列であり、デベロッパーのメールアドレスではありません。デベロッパーの ID は、Get Developer API 呼び出しを使用して、デベロッパーのメールアドレスから特定できます。

トークンにエンドユーザー ID が含まれるように Edge を構成すると、以下に示すように、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",
  "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",
  "refresh_count" : "0"
}

ユーザー ID とアプリ ID で OAuth 2.0 アクセス トークンを取得および取り消す API

ユーザー ID、アプリ ID、またはその両方で OAuth トークンにアクセスするには、次の API を使用します。

トークン アクセスを有効にする手順

エンドユーザー ID とアプリ ID による OAuth 2.0 アクセス トークンの取得と取り消しを有効にするには、次の手順を使用します。

ステップ 1: 組織のトークン アクセス サポートを有効にする

トークン アクセスは、組織ごとに個別に有効にする必要があります。エンドユーザー ID またはアプリ ID による OAuth 2.0 アクセス トークンの取得と取り消しを有効にする組織ごとに、以下の PUT API を呼び出します。

次の呼び出しを行うユーザーは、組織の orgadmin または opsadmin のロールに属している必要があります。{中かっこ} の値を、組織固有の値に置き換えます。

> curl -H "Content-type:text/xml" -X POST \
  https://<ms-ip>:8080/v1/organizations/{org_name} \
  -d '<Organization name="{org_name}">
      <Properties>
        <Property name="features.isOAuthRevokeEnabled">true</Property>
        <Property name="features.isOAuth2TokenSearchEnabled">true</Property>
      </Properties>
    </Organization>' \ 
  -u {userEmail}:{mypassword}

ステップ 2: 組織の opsadmin ロールの権限を設定する

組織内の orgadmin ロールと opsadmin ロールにのみ、ユーザー ID またはアプリ ID に基づいて OAuth 2.0 トークンを取得(HTTP GET)および取り消し(HTTP PUT)する権限を付与する必要があります。アクセスを制御するには、組織の /oauth2 リソースに get 権限と put 権限を設定します。このリソースの URL の形式は次のとおりです。

https://<ms-ip>:8080/v1/organizations/{org_name}/oauth2

orgadmin ロールには、必要な権限がすでに付与されているはずです。/oauth2 リソースの opsadmin ロールの場合、権限は次のようになります。

<ResourcePermission path="/oauth2">
    <Permissions>
        <Permission>get</Permission>
        <Permission>put</Permission>
    </Permissions>
</ResourcePermission>

Get Permission for a Single Resource API 呼び出しを使用して、/oauth2 リソースに対する権限を持つロールを確認できます。

レスポンスに基づいて、Add Permissions for Resource to a Role API 呼び出しと Delete Permission for Resource API 呼び出しを使用して、/oauth2 リソース権限に必要な調整を行うことができます。

次の cURL コマンドを使用して、opsadmin ロールに /oauth2 リソースの get 権限と put 権限を付与します。{中かっこ} の値を、組織固有の値に置き換えます。

> curl -X POST -H 'Content-type:application/xml' \
  http://<ms-ip>:8080/v1/organizations/{org}/userroles/opsadmin/permissions \
  -d '<ResourcePermission path="/oauth2">
      <Permissions>
        <Permission>get</Permission>
        <Permission>put</Permission>
      </Permissions>
    </ResourcePermission>' \
  -u {USEREMAIL}:{PWD} 

次の cURL コマンドを使用して、orgadmin と opsadmin 以外のロールから /oauth2 リソースの get 権限と put 権限を取り消します。{中かっこ} の値を、組織固有の値に置き換えます。

> curl -X DELETE -H 'Content-type:application/xml' \
  http://<msip>:8080/v1/organizations/{org-name}/userroles/{roles}/permissions \
  -d '<ResourcePermission path="/oauth2">
      <Permissions></Permissions>
    </ResourcePermission>' \
   -u {USEREMAIL}:{PWD} 

ステップ 3: oauth_max_search_limit プロパティを設定する

/<inst_dir>/apigee/customer/application/management-server.properties ファイルの conf_keymanagement_oauth_max_search_limit プロパティが 100 に設定されていることを確認します。

conf_keymanagement_oauth_max_search_limit = 100

このファイルが存在しない場合は作成します。

このプロパティは、トークンの取得時に使用されるページサイズを設定します。Apigee では 100 の値を推奨していますが、必要に応じて設定できます。

新規インストールの場合、このプロパティはすでに 100 に設定されています。このプロパティの値を変更する必要がある場合は、次のコマンドを使用して Management Server と Message Processor を再起動します。

> /<inst_rt>/apigee/apigee-service/bin/apigee-service edge-management-server restart
> /<inst_rt>/apigee/apigee-service/bin/apigee-service edge-message-processor restart

ステップ 4: エンドユーザー ID を含めるトークンを生成する OAuth 2.0 ポリシーを構成する

アクセス トークンの生成に使用される OAuth 2.0 ポリシーを構成して、トークンにエンドユーザー ID を含めます。エンドユーザー ID をアクセス トークンに含めることで、ID でトークンを取得して取り消すことができます。

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

以下の OAuth 2.0 ポリシー(GenerateAccessTokenClient)は、OAuth 2.0 アクセス トークンを生成します。エンドユーザー 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>

次の cURL コマンドを使用して OAuth 2.0 アクセス トークンを生成し、ユーザー ID を appuserID ヘッダーとして渡します。

> curl -H "appuserID:6ZG094fgnjNf02EK" \
https://myorg-test.apigee.net/oauth/client_credential/accesstoken?grant_type=client_credentials \
  -X POST \
  -d 'client_id=k3nJyFJIA3p62TKIkLO6OJNXFmP&client_secret=gk5K5lIp943AY4'

この例では、appuserID がリクエスト ヘッダーとして渡されます。リクエストの一部として情報を渡す方法は多数あります。たとえば、以下を使用します。

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