APi Gateway Platform Apigee (2) Basic Authentication／APi Key Authentication

下記の記事ではApigeeの説明と、基礎的な操作について記載しました。

> APi Gateway Platform Apigee (1) XMLからJSONへのデータ変換
http://qiita.com/snomoto/items/3a68d5127e703505b23f

本記事においては、APi Gatewayとして期待されるセキュリティまわりの機能を利用してみたいと思います。

タイトルにBasic Authenticationとありますが、ApigeeはBasic認証自体を提供は**していません**。


> https://community.apigee.com/questions/2277/please-share-adding-basic-authentication-policy-ex.html
Answer by arghya das · Mar 30, 2015 at 03:39 PM @nagesh If you are trying to use the Basic Authentication policy for protecting your api, then that's not the right usage for the policy. The policy is not meant to provide basic authentication for a resource or apiproxy, rather it allows you to encode/decode a basic authentication header.

色々といじって時間を使ってしまいました。皆様方におかれましては時間を無駄になさらぬよう、ここに明記しておきます！

2016年11月に、Apigeeの管理画面のデザインが大幅に変更されました。
新デザインにてAPiを作成し、**API Keyを用いた認証**機能を利用してみたいと思います。

# APi Gatewayの作成
- 左のリストの一番上の「Develop」をクリックします。
<img width=512" alt="apigeeNew01.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/009f6c71-ae4b-92ea-af98-41ed910f9527.png">  
　　
- 左のリスト2列目、2番目の「APi Proxies」をクリックします。下図の①  
- 次に、右上の「+Proxy」をクリックします。下図の②
<img width="512" alt="ApigeeNew02.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/19c15c3b-dcb9-3313-37bf-f008724e9170.png">  
　　

- 旧デザインと同じ画面になりますので、同じようにAPiを作成します。「Reverse proxy(most common)」でOKです。
<img width="512" alt="ApigeeNew03.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/b1057f46-be9a-ee78-3ee5-30f0a371aabc.png">
　　

- 設定入力画面、"Proxy Name"のところ、名前としては分りやすいように"apikey"とでもしましょう。"Existing APi"にはAPi Gatewayの向こう側に置きたいAPiエンドポイント(ターゲット)URLを指定します。  
　　

- そして、次にSecurityの設定入力が出ますが、ここで「API Key」を選択します。また「Publish API Product」にもチェックを入れてください。
![key001.png](https://qiita-image-store.s3.amazonaws.com/0/147747/247febb0-ec07-fc65-dba7-72fa6e8e2eb2.png)
　　　
　　　　　

- prodとtestの両方の環境をdeployし、APi Gatewayの作成は完了です。  
<img width="512" alt="apigeen006R.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/c13b8792-d523-a43f-c4d6-73467aefc03b.png">

作成したエンドポイントURLをクリックして、下記のようなメッセージが出ればアクセス制御できています。
`{"fault":{"faultstring":"Failed to resolve API Key variable request.queryparam.apikey","detail":{"errorcode":"steps.oauth.v2.FailedToResolveAPIKey"}}}`


# APi Keyを払い出す
- Summary画面としては旧デザインと大きく異なってはいないようですね。（タブが横幅にフィットしない仕様含めて…）


- 左側のアイコンリストから、「PUBLISH」→「Developers」を選択します。
![api002.png](https://qiita-image-store.s3.amazonaws.com/0/147747/cf96e7ba-f2ce-ef78-4eea-e7a64acf6f8c.png)

- 謎のテスト用アカウントが表示されていると思うのですが、一方で自分自身がリストに入っていません。
画面右上の 「+Developer」ボタンから自分の情報を入力して「Save」します。
　　


- 次に、左側のリストから、「PUBLISH」→「Apps」を選択します。
![api003.png](https://qiita-image-store.s3.amazonaws.com/0/147747/c9709141-0bc1-570e-2401-a2c299674d4a.png)
　　

- 画面右上の「+Apps」ボタンから、アプリケーションを登録します。
    - 下図①のNameには分かりやすいように「apikeydevapp」と入力します。
    - Display Nameは上記の「apikeydevapp」が自動で反映されるはずです。
    - 下図②のDeveloperには、先ほど登録した自分自身を選択します。
    - 下図③のProductsには、作成した「apikey」を選択します。  
        - 「Save」してください。 
         
![api004.png](https://qiita-image-store.s3.amazonaws.com/0/147747/4ef78c1c-ddf9-f760-b0ac-2ab1859c5bd9.png)
　　

- 作成したApps、「apikeydevapp」をクリックしてみると、Credentials情報が記載されたページに遷移するかと思います。Consumer Keyの欄の「Show」ボタンを押すと、文字列が表示されます。これがAPi Keyとなります。
![api005.png](https://qiita-image-store.s3.amazonaws.com/0/147747/5821276f-2de1-ab73-a013-408db17401fc.png)
  
- 改めてAPi Keyをパラメータに入れて、アクセス制御しているエンドポイントにアクセスしてみましょう。下記のように、apikeyというパラメータとして渡せばOKです。
`http://{xxxxxxxxxxxxxxxx}-prod.apigee.net/apikey?apikey=Consumer Keyのコピペ`


アクセスできましたでしょうか？
これで、エンドポイントのアクセス制御を実現することができました。