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

このドキュメントでは、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 または 組織に対する opsadminvalues は、組織固有の値に置き換えます。 values:

curl -H "Content-type:text/xml" -X POST \
  https://management_server_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 USER_EMAIL:PASSWORD

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

組織内の orgadmin ロールと opsadmin ロールのみ OAuth 2.0 トークンの取得(HTTP GET)と取り消し(HTTP PUT)の権限を ユーザー ID またはアプリ ID で 指定できますアクセスを制御するには、/oauth2 リソースに get 権限と put 権限を設定します。 組織です。このリソースの URL は次の形式になります。

https://management_server_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 権限。置換 values は組織固有の値に置き換えます。

curl -X POST -H 'Content-type:application/xml' \
  http://management_server_IP:8080/v1/organizations/org_name/userroles/opsadmin/permissions \
  -d '<ResourcePermission path="/oauth2">
      <Permissions>
        <Permission>get</Permission>
        <Permission>put</Permission>
      </Permissions>
    </ResourcePermission>' \
  -u USEREMAIL:PASSWORD

getput を取り消すには、次の curl コマンドを使用します。 リソースに対する /oauth2 リソースに対する権限 orgadminopsadminvalues を、 組織固有の値:

curl -X DELETE -H 'Content-type:application/xml' \
  http://management_server_IP:8080/v1/organizations/org_name/userroles/roles/permissions \
  -d '<ResourcePermission path="/oauth2">
      <Permissions></Permissions>
    </ResourcePermission>' \
   -u USEREMAIL:PASSWORD

ステップ 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 アクセスを生成します。 あります。太字の <AppEndUser> タグが追加されていることに注意してください。 エンドユーザー 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 アクセスを生成できます。 ユーザー 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 を提供するフロー変数を使用する