42

django rest framework Docsに従ってトークン認証を実装しました。

私が読んだ形では、DRF のトークン認証は非常に単純です。ユーザーごとに 1 つのトークンであり、トークンは期限切れにならず、常に有効です (私は正しいですか? )。

より良いプラクティスがあることは理解していますが、今のところ、DRF トークン認証で問題ありません。

私の質問は、通常の DRF トークン認証でログアウトするためのベスト プラクティスは何ですか?

つまり、ユーザーがログアウトしたときに、クライアント側からトークンを削除する必要がありますか? ログイン時にトークンを再度取得しますか?トークンを削除して新しいトークンを生成する必要がありますか?

これを経験した人はいますか?

4

3 に答える 3

16

トークン認証の全体像:

通常、認証サービスでは、トークンに関連付けられた有効期間があります。特定の時間が経過すると、トークンは期限切れになります。ここでは、サーバーによって送信された有効期限を持つアクセス トークンを取得します。サーバーがユーザーを特定できるように、クライアントはリクエストヘッダーで毎回このトークンを送信する必要があります。いつ期限切れになるかを追跡するか、INVALID_TOKENエラーが発生するまで使い続けることができます。その場合、サーバーからトークンを再度取得する必要があります。

access_token の有効期間は、クライアントへのアクセスを許可するユーザーのログイン セッションとは無関係です。OAuth2には、ユーザーのログインやログアウト、またはセッションの概念がありません。トークンは、ユーザーが本人であるかどうかを識別するためにのみ使用されます。

トークンは、ユーザーとクライアントに対して一意です。Cookie に保存して、Remember Me などを有効にすることができますが、サーバー上では削除する必要はありません。トークンの有効期限が切れるたびに、クライアントはサーバーにリクエストを送信してトークンを再度取得する必要があります。

DRF トークン認証でのトークンの有効期限:

現在、DRF トークン認証はこの機能をサポートしていません。自分で実装するか、この機能を提供するサードパーティのパッケージを使用する必要があります。トークンの有効期限をチェックし、トークンの有効期限が切れている場合は例外を発生させる必要があります。

自分で実装するには、DRF トークン認証クラスからサブクラス化し、ロジックを追加します。
サードパーティのパッケージdjango-rest-framework-expiring-tokens を使用することもできます。

参考文献:
1. RESTful API のトークン認証: トークンは定期的に変更する必要がありますか?
2. Google でログインするために OAuth2 を使用したアプリケーションからログアウトする方法は?

于 2015-06-09T19:04:13.813 に答える