JWTを作成/ユーザーに割り当てる際に、データベースに保存する必要がありますか?
トークンをデータベースに保存することの欠点/欠点は、JWTトークンのペイロードのすべてのデータがすでにデータベースに保存されているため、トークンを保存すると冗長データが保存され、JWTの検証が署名キーを通じて行われることです。長期間変化しないが、
JWTトークンをデータベースに保存することで私が確認できるプラス/プロは、トークンを割り当てた後でも、有効期限が切れる前に既存のトークンを無効化または非アクティブ化する権限を持つことになります。
トークンを格納する使用例の1つは、認証スキームに更新があり、古いトークンをすべて無効にする必要がある場合に、トークンが無効になることです。
私のデータベースにJWTトークンを保存することで確認できる利点は、トークンを割り当てた後でも、有効期限が切れる前でも既存のトークンを無効化または非アクティブ化することができるということです。
これは、データベースに対してトークンを検証している場合にのみ発生します。この場合、なぜJWTを使用するのですか?自己完結型の署名付きトークンを持つことの重要な点は、ユーザーがログインしていることを確認するためにデータベースにアクセスする必要がないことです。
あなたはOAuth2を実装しましたが、90年代の「セキュリティ」仕様があります
「ユーザーのセッションは15分後に期限切れになる必要があります」
または
「ユーザーがログアウトをクリックすると、セッションは無効になります」
これを回避する1つの方法は、トークン失効を実装することです。これを実現する方法はいくつかありますが、トークンをデータベースに保存し、それらに失効のマークを付けるのは、小規模なセットアップではおそらく最も簡単です。
失効の問題は、すべてのリソースサーバー間で即座に一貫性を保つ必要があることです。まさに、それを回避しようとしていることです。
ショートアクセストークンの期限切れを優れたソリューションとして販売できる場合は、素晴らしいですが、そうでない場合でも、本質的にはハッキングに悩まされています。