API キー検証の設定

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

Apigee Edge のドキュメントはこちらをご覧ください。

API に API キー検証を設定するには、Verify API Key タイプのポリシーを接続します。VerifyAPIKey ポリシーで必要となる唯一の設定は、クライアント リクエスト内の API キーの想定される場所です。API プロキシは、指定された場所を確認し、API キーを抽出します。API キーが予想される場所に存在しない場合は、エラーがスローされてリクエストは拒否されます。API キーは、クエリ パラメータ、フォーム パラメータ、または HTTP ヘッダーの中に置くことができます。

たとえば、次のポリシー構成では、想定されるキーの場所を apikey というクエリ パラメータとして定義しています。リクエストが成功するためには、API キーがクエリ パラメータとしてリクエストに付加されていなければなりません(例: ?apikey=Y7yeiuhcbKJHD790)。

API キーを検証するには、以下のポリシーを作成します。

<VerifyAPIKey name="APIKeyValidation">
  <APIKey ref="request.queryparam.apikey"/>
</VerifyAPIKey>

このポリシーは、保護する必要があるすべての API にアタッチできます。

このポリシータイプの包括的なドキュメントについては、ポリシー リファレンスのトピック VerifyAPIKey ポリシーをご覧ください。

API プロキシは、リクエストに存在するすべての HTTP ヘッダーとクエリ パラメータを自動的に通過します。そのため、API キーが検証された後は、メッセージからその鍵を削除し、API キーが有線でバックエンド サービスに送信されないようにすることをおすすめします。このためには、次のように AssignMessage タイプのポリシーを使用します。

<AssignMessage name="StripApiKey">
    <DisplayName>Remove Query Param</DisplayName>
    <Remove>
        <QueryParams>
            <QueryParam name="apikey"/>
        </QueryParams>
    </Remove>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"></AssignTo>
</AssignMessage>

ポリシーの適用(アタッチ)

ポリシーは、処理ステップとして API プロキシフローに接続する必要があります。ポリシーをリクエスト PreFlow に適用することで、API キーはクライアント アプリから API プロキシによって受信されるすべてのリクエストで検証されます。検証後、API キーは送信リクエストから削除されます。

以下のように、保護する API プロキシの ProxyEndpoint にポリシーをアタッチします。

<ProxyEndpoint name="default">
  <PreFlow>
    <Request>
      <Step><Name>APIKeyValidation</Name></Step>
      <Step><Name>StripApiKey</Name></Step>
    </Request>
  </PreFlow>

ポリシーを接続した後で、API プロキシをデプロイします。

リクエストを有効な API キーで送信する

組織内の管理者は、次のようにアプリの API キーを取得できます。

curl "https://apigee.googleapis.com/v1/organizations/$ORG/developers/$DEVELOPER_EMAIL/apps/$APP \
  -H "Authorization: Bearer $TOKEN"

ここで、OAuth 2.0 アクセス トークンの取得で説明されているように、$TOKEN は OAuth 2.0 アクセス トークンに設定されます。この例で使用されている curl オプションの詳細については、curl の使用をご覧ください。使用される環境変数の説明については、Apigee API リクエストの環境変数の設定をご覧ください。

この呼び出しに対して返されるアプリのプロファイルは、コンシューマ キー(API キー)とシークレットを提供します。コンシューマ キーの値は、保護された API に対するリクエスト内の API キーに使用する値です。

たとえば、リクエストの中に API キーが含まれていないと、認証が失敗します。

curl http://apitest.examplepetstore.com/weather/forecastrss?w=12797282

失敗のメッセージには、ポリシーが API キーを調べたが有効なキーが見つからなかったことが示されます。

OAuth Failure : Could not resolve the app key with variable request.queryparam.apikey

アプリのコンシューマ キーがクエリ パラメータとして含まれている場合に予想される結果は認証の成功です。

curl http://apitest.examplepetstore.com/weather/forecastrss?w=12797282&"apikey=PulSCqMnXGchW0pC0s5o9ngHVTWMeLqk"

予想される結果は、天候サービスからの成功のレスポンスです。

リクエスト中の API キーの値を変更すると、認証で失敗します。

curl http://apitest.examplepetstore.com/weather?forecastrss?w=12797282&"apikey=PulSCqMnXGchW0"

結果は次のようになります。

OAuth Failure : Consumer Key is Invalid