web-dev-qa-db-ja.com

盗まれたアクセストークンの更新を防ぐ方法

シナリオは、次のとおりです。有効期間が長い更新トークンと有効期間が短いアクセストークンがあります。

セットアップ:クライアント、アプリケーションサーバー、認証サーバーがあります。

  • クライアントはアクセストークンを保存します。
  • アプリケーションサーバーは更新トークンを保存します。
  • 認証サーバーは、更新+アクセストークンを渡します。

利点の1つは、盗まれたアクセストークンが有効な間だけ使用できることです。

ハッカーが30分間有効なアクセストークンを盗んだとします。ハッカーが有効で期限切れの盗まれたアクセストークンを使用してリクエストを30分後に送信すると、アプリケーションサーバーはそれをリフレッシュトークンで更新します。これにより、ハッカーは新しい有効で期限切れでないアクセストークンを取得します。

これをどのように防ぐことができますか?

3
Arthur

新しいアクセストークンを取得するには、クライアントが更新トークンをサーバーに送信する必要があります。したがって、攻撃者がアクセストークンを盗むだけの場合、攻撃者は更新できません。これを行うには、彼女もリフレッシュトークンを盗む必要があります。さて、攻撃者がアクセストークンを盗む立場にある場合、攻撃者はアクセストークンを取得している間に、おそらく更新トークンも奪うことができます。だから、これはトークンの盗難シナリオに大きな違いをもたらさないかもしれませんが、私はそれを指摘したかったのです。

これを1つのアクセスと1つの更新トークンに分割しても、盗難を防ぐことはできません。それはそのために設計されたものではありません。分割の目的は、リクエストごとにデータベースにアクセスする必要なく、サーバーがトークンを取り消せるようにすることです。

それでは、どのように盗難から保護しますか?セッションIDかどうかに関係なく、クライアント側のシークレットで行うのと同じ方法です。 (この場合は更新トークンの)有効期間を設定し、適切なTLSを使用して、おそらく地球の反対側から突然送信される要求をブロックできるように、トークンに地理位置情報を含めます。

2
Anders