個人のWebサイトでeBay検索APIに基づくデモJavaScriptアプリケーションを公開しようとしています。AppIDが読み取られて悪用されるのを防ぐ方法があるかどうか疑問に思いました。AppIDを特定のドメインに関連付けることは可能ですか?eBay開発者フォーラムでも公式ドキュメントでも答えを見つけることができませんでした。
2 に答える
クライアントにデータを送信すると、クライアントはデータを読み取ることができます。これを防ぐ方法はありません (JavaScript がデコードできる場合は、ユーザーもデコードできます)。これを回避するには、データ (AppID) をサイトに保持し、サーバーでリクエストを処理する必要があります。そのため、JavaScript はサーバーと対話する必要があり、サーバーはリクエストを eBay に渡し、AppID を追加してから、結果を JavaScript に返します。
あなたの質問に答えるには...
制限はそのようにサイトごとに機能せず、通常はすべての用途/サイトに対して 1 つの AppID しかないため、AppID を制限することはできないようです。2010 年のこの包括的なスレッド(以下に引用)を参照してください。大きく変わったとは思えません。最終結果は、基本的に、Web サイトの検索結果などの読み取り専用アプリケーションでは問題になりません。
ブラウザー内での JSON API 呼び出しの保護に関するより一般的な方法
リファラーをチェックすることは、それ以外の場合はパブリック API を保護するための最良の方法です。これは、たとえば、Google がマップの API キーを制限する方法です: https://developers.google.com/maps/documentation/javascript/tutorial
API がサードパーティのコンピューターから呼び出されることを考えると、不正行為を防ぐ唯一の方法はアクティビティの監視です。おそらく、呼び出しのリストを他の Web サイトのアクティビティと比較するか、JSONP を使用して、悪用の傾向を追跡する必要があります。 AJAX を使用してブラウザのプロパティを検査します。たとえば、Google は API 呼び出しと Google Analytics 呼び出しを相互参照できますが、常に誤検知が発生する可能性があります。
最後に、懸念が CSRF である場合、これがあります:パブリック JSONP リクエストを確実に保護する方法は?
URL が再度変更された場合に備えて、eBay スレッドからそのまま引用します。
開発者アカウントごとに 1 つの DevID があります。
複数の AppID が存在する可能性がありますが、これらは有料のサポート チケットを介してのみ利用できます。
各 AppID は、複数の CertID を持つことができます。CertID によって通話制限が決まります。
AppID ごとに無制限のトークンを生成できます。各トークンは、AppID、UserID、および関連する eBay ユーザーのパスワードのペアです。トークンは現在 18 か月間有効です。その後、再生成する必要があります。トークンは、API または Web サイトの優先設定を介して時期尚早に「取り消す」こともできます。
トークンを必要とする API ファミリの場合、独自の UserID に基づく単一のトークンを使用して、ほとんどの公開情報を取得できます。ただし、プライベート トランザクションの詳細は、ターゲットの UserID に対して生成されたトークンを使用する場合にのみ利用できます。一部の呼び出しでは、実際にトークンから UserID を取得します。
複数のアプリケーションが同じ AppID を共有している場合、それらは両方とも 1 日の通話制限に影響します。そのため、別の AppID を要求する必要がある場合があります。
https://www.x.com/developers/ebay/ebay-api-call-limits
グラフに示されている制限は、特定の API ファミリの「合計」です。AppID ごとの暗黙的なものがあります。Trading API については、eBay は呼び出しごとまたは時間間隔ごとにさらに使用を制限しています。AddItem などの一部の呼び出しには、より高い制限があります。GetApiAccessRules は、実際の制限と使用量を返します。
Per-IP-address とは、呼び出し元のマシンの IP アドレスを意味します。複数の IP アドレスをローテーションすると、実際には制限が倍増します。JavaScript または Flash で記述された読み取り専用の「ウィジェット」が多数あり、クライアント ブラウザで実行され、クライアント IP を使用して呼び出しを行います。その場合、通話制限はかなり重要ではありません。
AppID、DevID、および CertID は、開発者アカウントの作成者に属します。その作成者は、API ライセンス条項に拘束されます。
キーの所有者として、サードパーティによる API のプログラムによる制御を許可してはなりません。厳密に言えば、これは、キーとそれらのキーから派生したトークンの両方が非公開のままであるべきであることを意味します (つまり、あなたの排他的な管理下にある)。
明らかに、FetchToken はクライアント側アプリケーションに推奨されているため、eBay はその厳密な解釈を強制しません。洗練されたユーザーは、行き来するトークンを簡単につかむことができます。自分の UserID に基づくトークンを使用すると、どのような害が生じる可能性がありますか?
- 1 日の通話制限を使い切る
- ライセンスに違反する API アプリケーションを作成する
議論の詳細については、この以前のスレッドを参照してください。(リンク切れ)
アプリケーションが eBay 互換アプリケーション チェックに合格すると、ユーザーごとに 150 万回の共有通話または 2 万回の通話をリクエストできます。
eBay の API の詳細については、eBay のフォーラムで質問することをお勧めします。