フロントエンドでの確認
利点
・ユーザー体験が向上する
→即時にフィードバックを提供できるため
・サーバーの負荷が軽減される
→サーバーとの通信が不要になるため
欠点
・セキュリティリスクが高い
→トークンの有効期限情報がクライアント側に存在するため、改ざんのリスクがある
・正確性に欠ける可能性がある
→クライアントの時計が不正確な場合など
バックエンドとの通信での確認
利点
・セキュリティが強化される
→トークンの有効期限情報はサーバー側で管理され、改ざんのリスクが低い
・トークンの正確な状態を常に把握できる
→サーバー側で一元管理されるため
欠点
・サーバーの負荷が増加する
→クライアントごとに頻繁に通信が発生するため
・レスポンス時間が長くなる可能性がある
→通信に時間がかかるため
ChatGPTの見解
バックエンドとの通信で確認する方法が一般的に推奨されます。
理由としては、「セキュリティ強化」!
具体的な実装方法としては以下のようなアプローチがあります:
①APIリクエスト時にトークンを検証
・クライアントからの各リクエストにトークンを添付し、バックエンドでその都度トークンを検証します。
・トークンが無効(例:期限切れ、改ざんなど)の場合、バックエンドは適切なエラーレスポンスを返します。
②定期的なトークン検証
・クライアント側で一定の時間ごとにバックエンドへトークンの有効性を確認するリクエストを送信します。
・トークンが有効であれば新しいトークンを発行する(リフレッシュトークンを使用する方法も含む)。
セキュリティ強化のための追加対策
・HTTPSを使用して通信内容を暗号化する。
・リフレッシュトークンを使用し、アクセストークンの有効期限を短く設定する。
・CORS設定を適切に行い、不正なアクセスを防ぐ。
・CSRFトークンを使用し、クロスサイトリクエストフォージェリ攻撃を防ぐ。