iOS モバイルアプリのバックエンドにdjango-allauthとdjango-rest-authを使用しています。私はDjango Rest Framework、特に言及されたものに不慣れです。これらは、アクセス トークン ベースの承認に最適です。ご存知のように、ログインに成功した後、ユーザーがアクセストークンを受け取り、ログアウトするとアクセストークンが削除されます。ただし、複数のデバイスの場合、ユーザーはすべてのデバイスからログアウトされると想定しています。デバイスごとにアクセス トークンを作成し、これらのアクセス トークンを承認に使用する方法はありますか?
1 に答える
独自の API、クライアント、およびサードパーティ API の間で認証を行う場合、サードパーティ アプリケーションのトークンをクライアントに公開したくはありません。これについては、Stack Overflow forpython-social-auth
で過去に取り上げました。同様に for も参照することをお勧めdjango-allauth
します。
django-rest-auth
複数のクライアント間で共有されるユーザーごとに 1 つのトークンを保持するを使用していると述べました。これは、Django REST Framework が提供する と非常によく似ておりTokenAuthentication
、同じ欠点が数多くあります。すべてのクライアントがユーザーの同じ認証トークンを共有するため、何らかの理由でトークンを取り消す必要がある場合、すべてのクライアントが影響を受けます。さらに悪いことに、django-rest-auth
ユーザーは明示的に「ログアウト」できます。これにより、全員のトークンがすぐに取り消されます。これは、API を使用するクライアントが 1 つまたは 2 つしかない場合にうまく機能し、不思議なことに消えるトークンを処理できますが、より大きなものにはうまく機能しません。また、探しているユーザーの複数のトークンもサポートしていません。
通常、API では OAuth などのトークン ベースの認証を使用することをお勧めします。Django RESTdjango-oauth-toolkit
Framework では、これが推奨される傾向があります。これにより、クライアントに固有のユーザーのトークンを保持しながら、サードパーティとクライアントの間で本質的にリクエストをプロキシできます。トークンはクライアントに固有であるため、トークンが互いに独立しているため、あるクライアントのトークンが取り消されたり期限切れになったりして別のクライアントに影響を与えることを心配する必要はありません。
OAuth は、 Stack Exchange、Google、Facebookなど、多くの「有名企業」で使用されています。「ログアウト」の概念を直接サポートしているわけではありませんが、通常は、アプリケーションのユーザーがアプリケーションのトークンを取り消す独自のページを作成することをお勧めします。彼らに代わって。