4

oauth2 アクセス トークンとリフレッシュ トークンを生成し、データベースに保存します。UUID v4 を使用してこれらのトークンを生成し、ダッシュを削除します。以前は有効期限が切れたトークンを削除していましたが、何かが起こる可能性があると考えたので、今はすべて保存しています。

攻撃者が自分用に生成されたすべてのアクセス トークンをローカルに保存し、これらのアクセス トークンを認証のために何度も使用し続けたらどうなるでしょうか。私は DB 管理者として、生成されたトークンを削除していたため、DB はトークンが一意であることを知る方法がありません。したがって、UUIDv4 アルゴリズムが別のユーザーのアクセス トークンを生成し、それが衝突 (以前に生成されたものと同じ UUID) であり、攻撃者がその衝突を発見した場合、攻撃者は以前に生成されたトークンを持っているため、サービスに入ることができます。

私の質問は、これについて心配し、競合が発生した場合にすべてのトークンを保持して一意性を確認するか、または有効期限が切れた後にアクセス トークンとリフレッシュ トークンを削除し、UUIDv4 がこれを防ぐのに十分なエントロピーを持っていることを信頼する必要があるかということです。

また、すべてのトークンを保持すると、アクセス トークンが 1 時間ごとに期限切れになり、ユーザーが次にアクションを実行したときに再生成されるため、データベースが膨張するのではないかと心配しています。

どんな助けでも大歓迎です!

4

1 に答える 1

2

理論的には UUID の衝突の可能性は最小限に抑えられていますが、UUIDの要点は実際には一意であることです。「Universally Unique Identifier」という名前を考えてみてください。衝突の可能性を計算するには、たとえばこのリンクを参照してください。私はそれが起こるまで座って待つことはしません。;-)

衝突が 1 回でも発生する現実的な可能性に十分な UUID を生成するとは思いません。それでもそうすると、データベースに多くのアクセス トークンを保存することも問題になる可能性があり、巨大なストレージが必要になる可能性があります。それでも衝突が怖い場合は、UUID よりもさらに一意のものを生成することをお勧めしますが、それらすべてをデータベースに保存することは避けてください。

于 2014-05-14T07:20:29.877 に答える