web-dev-qa-db-ja.com

認証トークンを使用したパブリックAPI-デモトークンを保護することは可能ですか?

RESTいくつかの計算を実行して結果を返すためのAPIがあり、承認されたユーザーのみがAPIを使用できる非常に単純なトークンシステムを使用しています。

ユーザーは次のようにトークンをクエリに追加します。

{
    authorization: 'my token',
    moreData: 51351,
    etc: 'etc'
}

このAPIのユーザーは通常プログラマーではないため、APIを示す非常に単純なWebページを作成しました。Webページから直接実行できるライブデモを使用して、それがどのように機能し、何が返されるかを示しています。

このデモには、サンプルのクエリに表示される偽の認証トークンがあります。この偽のトークンをインターセプトし、リクエストを送信する前に実際のトークンに置き換える単純で隠された、部分的に難読化されたJavaScript関数を作成しました。ただし、ブラウザでデバッグツールからの要求を実際に監視しているユーザーは、送信された実際のトークンを簡単に確認でき、このトークンを使用して独自の要求を送信できます。

もちろん、デモトークンをレート制限することもできますが、ライブデモで実験しているユーザーが一時的なロックアウトを経験する可能性があることを意味します。

デモ認証トークンを使いやすく、ライブデモが必要なAPIから保護する方法はありますか?

12
Erlend D.

ステフェンが言ったように、ユーザーからトークンを保護することはできません。

「デモ」Apiを使用するより一般的なシナリオの提案を追加したいと思います。あなたのAPIにはデータが保存されておらず、入力時に計算を行うだけなので、これはあなたにとって問題ではないかもしれませんが、デモトークンが実際のAPIをポイントするのではなく、デモ/サンドボックスをポイントすることができます意味があるが実際のデータではないバージョン:

  1. デモトークンのみが含まれている-他のユーザーはいない
  2. 毎日自動的にリセットされる
  3. フルセットではなく少量のデータが含まれている(データがある場合)
  4. デモトークンを使用するだけでなく、実際のアカウントを取得するようユーザーに要求する方法として、すべての計算に対して有効な結果を返さない可能性があります

あなたのライブシステムがデモトークンでだれにも触れられないので、これは私にとってより安全だと思います。また、販売している機能などがあるシナリオでは、開発者はそれらを統合し、正しく統合されたことを確認できますが、そうではありません。機能/データの完全なセットをデモトークンに渡します。

27
GreatSeaSpider

気づいたように、ユーザーは送信された要求の種類を簡単に確認できるため、トークンを保護することはできません。デモサイトはあなたの管理下にあるので、いつでもデモトークンを変更できます。有効なトークンのみを受け入れ、トークンを頻繁に変更する限り、トークンの誤用を制限できます。また、トークンを含むページはサーバーによって生成されたため、ユーザーのソースIPアドレスに固有のトークンと、トークンの誤用をさらに制限するCookieを生成することもできます。

12
Steffen Ullrich