私は現在、Webおよびモバイルアプリで使用されるRESTful APIを構築しています。 APIへの認証は JSON Web Tokens を使用して行われます。
JWTを使用する場合、exp
クレームを使用して、特定の時間後にトークンを期限切れにすることができます。これをjti
クレームと組み合わせることで、リプレイ攻撃や、アプリに組み込まれる攻撃を防ぐのに役立ちます。ただし、ユーザーの便宜のために、リクエストごとに、または30分程度の短い間隔でログインするようユーザーに要求し続けるのは望ましくありません。
それで、私は次の状況を考えています:
クライアントが割り当てられた1時間の有効期限内にそれ以上の要求を行わない場合、後続の要求は再度ログインするように要求します。
私の質問:これは、ユーザビリティとリプレイ攻撃の防止との間のトレードオフである最良のソリューションですか?
懸念を分離する必要があると思います。クライアント側でのJWTの保護は、APIではなく、JWTを使用するアプリケーションの仕事です。この線がぼやけている場合は、アプリケーションをリエンジニアリングする必要がある可能性があるため、サービス駆動ではなく、モノリシックになる可能性があります。
JTI、EXP、IATは、攻撃を受けた場合に攻撃を軽減するためのツールを提供するように設計されています。 TLSは、送信中のJWTのスヌーピングを防ぐために使用されます。 EXPのウィンドウを短くすると、単一のトークンの表示が制限されますが、最終的にアプリケーションを介してトークンを取得した場合、EXPはミュートになり、次のトークンを取得します。