API認証
アプリ申請APIを利用するには、事前に同APIへのアクセス権を構成する必要があります。構成方法は以下のとおりです。
- Amazonアプリストアの開発者コンソールでセキュリティプロファイルを作成します。
- [APIアクセス] ページで、そのセキュリティプロファイルをアプリ申請APIに関連付けます。
- Login with Amazon APIを使用してアクセストークンをリクエストします。同トークンは、各APIリクエストのHTTPヘッダーに追加します。
セキュリティプロファイルの作成方法
アプリ申請APIを使用するには、セキュリティプロファイルを作成し、同プロファイル用APIへのアクセス権をリクエストする必要があります。セキュリティプロファイルは、APIアクセス用のアクセストークン生成時に用いられるメカニズムです。
セキュリティプロファイルを作成するには、次の手順に従います。
- Amazon開発者コンソールアカウントにログインします。アカウントがない場合は、アカウントの作成を求められます。
- メインナビゲーションで、[アプリ&サービス] をクリックします。
- サブメニューで [APIアクセス] をクリックします。
-
API名をクリックします。
- [セキュリティプロファイルを新規作成] ボタンをクリックします。
- [セキュリティプロファイル名] と [セキュリティプロファイルの説明] を入力し、[保存] をクリックします。
- [ウェブ設定] タブを開き、表示されているクライアントIDとクライアントシークレットを保存します(アプリ申請APIにアクセスする際に必要な情報です)。
セキュリティプロファイルをアプリ申請APIに関連付ける方法
[APIアクセス] ページで、そのセキュリティプロファイルをアプリ申請APIに関連付けます。
- [APIアクセス] ページに移動します。
- API名をクリックしてパネルを展開します。
- ドロップダウンリストから新たに作成したセキュリティプロファイルを選択します。
- [関連付ける] をクリックして、セキュリティプロファイルをこのAPIに関連付けます。API名と、関連付けられたセキュリティプロファイルが、[使用中のセキュリティプロファイル] パネルに追加されます。
これで、クライアントIDとクライアントシークレットを使用して、Login with Amazon(LWA)アクセストークンをリクエストできるようになりました。
LWAアクセストークンのリクエスト方法
クライアントIDおよびクライアントシークレットと共にLogin with Amazon APIを使用して、Login with Amazonアクセストークンをリクエストするには、次の手順に従います。
1.トークンリクエストを送信する
次のヘッダーとコンテンツでhttps://api.amazon.com/auth/o2/token
にPOSTリクエストを送信します。
- ヘッダー:
Content-Type: application/x-www-form-urlencoded
- コンテンツ:
client_id
: セキュリティプロファイルの作成方法に記載の手順7で保存したクライアントIDです。client_secret
: セキュリティプロファイルの作成方法の手順7で保存したクライアントシークレットです。grant_type
: 値をclient_credentials
に設定します。scope
: 値をappstore::apps:readwrite
に設定します。
JSONコンテンツの例:
{
"grant_type": "client_credentials",
"client_id": "amzn1.application-oa2-client.ae941846cdd745e9a53319f7bb98d435",
"client_secret": "41d135b2b02ce5f2fbf7643a66477c089fcc1d88d11f69d3e4a6285b917ca35d",
"scope": "appstore::apps:readwrite"
}
cURLリクエストの例:
curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' -d 'grant_type=client_credentials&client_id=amzn1.application-oa2-client.5c1462ee102c4a57a5224d0c72118741&client_secret=15d1829ddf4f12d1c5d425e57e5ca081d0f7a63bd94c9e142ff8b20d9de880a4&scope=appstore::apps:readwrite' https://api.amazon.com/auth/O2/token
2.レスポンスを保存する
レスポンスは、たとえば次のようになります。
{"access_token":"Atc|MAEBIBav2tvCbJOA9Jv5sRpej6xY_qzHFuCpbWT-Z94nRqVWVcfmZVNPEhZiet-H3vdQcORqE5pO4fCKEi6kfvzzPtxHIoPIte-ZbKB1XgfjfJnciJHqnbV1UF4WJ_an1g9y7yvWKWJddQ2NLPO-C-Y71BPxJ0KDWOPonn_2qFLY5OJo3BhHKIwNHteQAwkCA9iko8d5tosS7fo3dvS-PFmiBk3OMUmr1AdYtuOnq1RVrX7-C14oWzfACudykTn5cDb48Qy2k6R70__GzHG3fC_-Rfzt7zwhfdBWpwoQk-GbV4Bes457oZwHz89Tj-AAf3DouYQ","scope":"appstore::apps:readwrite","token_type":"bearer","expires_in":3600}
access_token
: アクセストークンexpires_in
: アクセストークンの有効期限が切れるまでの秒数scope
:appstore::apps:readwrite
とします。token_type
: 常にbearer
とします。
3.エラーレスポンスを処理する
トークンリクエストでエラーが発生した場合、レスポンスのメッセージ本文には次のエラーメッセージのいずれかが含まれます。
エラーメッセージ本文 | 詳細 |
---|---|
{"error_description":"Client authentication failed","error":"invalid_client"} | 無効なシークレットキー |
{"error_description":"The request has an invalid parameter : scope","error":"invalid_scope"} | 無効な範囲の値 |
{"error_description":"The authorization grant type is not supported by the authorization server","error":"unsupported_grant_type"} | 無効な認可グラントタイプ |
{"error_description":"The Content-Type is not supported by the authorization server","error":"invalid_request"} | サポート対象外のContent-Type |
アクセストークンの使用方法
まず、アクセストークンを保存します。アクセストークンは、LWAアクセストークンのリクエスト方法の手順で返されたレスポンスにあるaccess_token
フィールドの値です。
アプリ申請APIにリクエストを送信する際、Authorization
ヘッダーにBearer <アクセストークン>
の値を設定します。アクセストークンは、「Atc|」で始まる長い文字列です。
cURLリクエストの例:
curl -v -X GET "<endpoint URL>" -H "Authorization: Bearer Atc|MAEBIKfsULrH7jSzvJTV8UmiHWr9M86O3JRmv4t1hqoCBriSMEP5Gsey_FiBxteZ8oxGd6abGuOFga8fwnMhmSD_Sg4MI4odXLPgB2IVs8M1uswjuWjnsMcvehpWvf9tzQT8HTWiBigInJLB8BrMg5J3O02hlTvcF441XxXDXthyj993COJ2u5swOTKjC_dcijiN8amuzrj32rh9Fr3CNgCpoZ0WqXnBhoHUVMYSOBV-owA5rI4-OfysXC71Zbtv1hb8igk"
アクセストークンの有効期限が切れた場合は、LWAアクセストークンのリクエスト方法に記載の手順に従って新しいトークンを取得し、それを使用してリクエストを送信します。アクセストークンをリクエスト後に1時間以上経過すると、403 Forbidden HTTPエラーとなり、「Request is not authorized(リクエストが認可されていません)」というメッセージが表示されるようになります。これは、アクセストークンの有効期限が切れたことを示します。
Last updated: 2023年1月26日