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