API キー検証の設定

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

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

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

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

このポリシーは、保護を必要とするすべての API に添付できます。

このポリシータイプの包括的なドキュメントについては、ポリシー リファレンス トピックの Verify API Key ポリシーに用意されています。

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://api.enterprise.apigee.com/v1/o/{myorg}/developers/{developer_email}/apps/{app_name} -u email:password
    

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

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

    $ curl http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282
    

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

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

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

    $ curl http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282&"apikey=PulSCqMnXGchW0pC0s5o9ngHVTWMeLqk"
    

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

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

    $ curl http://{org_name}-test.apigee.net/weather?forecastrss?w=12797282&"apikey=PulSCqMnXGchW0"
    

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

    OAuth Failure : Consumer Key is Invalid
    

組織の管理者は、組織内で登録されたすべてのアプリのコンシューマ キーを取得できることを覚えておいてください。

    $ curl https://api.enterprise.apigee.com/v1/o/{myorg}/developers/{developer_email}/apps/{app_name} -u email:password