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

Edge for Private Cloud v4.18.01

このドキュメントでは、Google Cloud で OAuth 2.0 アクセス トークンの取得と取り消しを エンドユーザー ID、アプリ ID、またはその両方を使用できます。

アプリ 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 です。
  • access_token フィールドには OAuth 2.0 アクセス トークンの値が含まれます。

エンドユーザー ID による OAuth 2.0 アクセス トークンの取得と取り消しを有効にするには、 トークンにユーザー ID を含めるための OAuth 2.0 ポリシー(下記の手順を参照)。

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

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

取得と取り消しを行う API ユーザー ID とアプリ ID による OAuth 2.0 アクセス トークン

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

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

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

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

トークン アクセスは、組織ごとに個別に有効にする必要があります。各変数に対して以下の PUT API を呼び出します。 OAuth 2.0 アクセス トークンの取得と取り消しを有効にする組織。 アプリ ID で識別されます。

次の呼び出しを行うユーザーは、ロール orgadmin または 組織の opsadmin{curly braces} を組織固有の値に置き換えます。

> 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 ロールのみ OAuth 2.0 トークンの取得(HTTP GET)と取り消し(HTTP PUT)の権限を ユーザー ID またはアプリ ID で 指定できますアクセスを制御するには、/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 特定のリソースに対する権限があるロールを確認するには、Single Resource API を呼び出します。 /oauth2 リソース。

回答に基づき、 ロールに対するリソースに対する権限 リソースの削除 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 コマンドを使用して、/oauth2 リソースに対する get 権限と put 権限を orgadminopsadmin です。{curly braces} を組織固有の値に置き換えます。

> 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 プロパティ

conf_keymanagement_oauth_max_search_limit/opt/apigee/customer/application/management-server.properties のプロパティ ファイルは 100 に設定されています。

conf_keymanagement_oauth_max_search_limit = 100

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

このプロパティは、トークンを取得するときに使用されるページサイズを設定します。Apigee では 100 をおすすめします。 自由に設定できます

新規インストールでは、このプロパティはすでに 100 に設定されています。変更を Management Server と Message Processor を再起動するために、 コマンド:

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

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

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

アクセス トークンにエンドユーザー ID が含まれるようにポリシーを構成するには、 アクセス トークンにエンドユーザー ID を含める必要があり、 にはエンドユーザー ID が含まれています。

以下の GenerateAccessTokenClient という名前の OAuth 2.0 ポリシーは、OAuth 2.0 アクセスを生成します。 あります。太字の &lt;AppEndUser&gt; タグが、 エンドユーザー ID を含む変数:

<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 アクセス トークンを生成し、 appuserID としてのユーザー ID header:

> 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 を提供するフロー変数を使用する