私は this の記事を読んだだけで、なぜJWTがひどいのかについて。現在、認証に何を使用すればよいかわかりません。
コンテキスト:私が作成したAPIは、主にモバイルアプリ(iOSおよびAndroid)で使用されます。将来的には、Reactフロントエンドからもアクセスされるようになります。
過去には、トークン認証でDRFのビルドを使用しました。その後、電話はこのトークンをそれぞれのアプリのストレージに保存します。
今私は最近、これは安全ではなく、JWTを使用するべきだと言われました。 JWTを調査したところ、上記の記事が見つかりました。これは、JWTのサックと基本的なセッション認証の方が優れている理由を詳しく説明しています。しかし、私の知る限り、APIとして使用すると、DRFでセッション認証を使用できなくなりますか?
だから私の質問は?安全のために、DRFのどのツールを認証に使用すればよいですか?
私はその記事の執筆者であり、JWTがひどくて愚かである理由について私が与えるやや人気のあるテクニカルトークです(@ joepie91が私がこれまでよりもはるかに優れていると雄弁に書いています: http:/ /cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/ )。
アプリケーションの要件(モバイルアプリ+両方がバックエンドAPIと通信するJSフロントエンドのみのアプリ)を考慮して、OpenID Connect承認コードフロー(モバイルアプリ用のPKCE付き)を使用することをお勧めします。
特にモバイルアプリの場合、すばらしいAppAuthライブラリを使用することをお勧めします: https://appauth.io/ (iOSとAndroidの両方に優れたライブラリがあります)。
さて、JWTの使用に反対する人々を公に集めたときに、なぜ私が何かにOpenID Connect(したがってJWT)を使用することをお勧めするのか疑問に思うかもしれません。
安全なアプリを構築する際にJWTを使用するのはかなりひどいです。それらは複雑で、ほとんどのライブラリは仕様が完全ではないため、JWT暗号化などのより高度な機能を使用すると、サービス間の大きな問題や互換性の問題が発生することはほぼ間違いありません。
さらに、JWTが認証で一般的になった理由は、JWTが認証と承認のデータをキャッシュするために頻繁に使用されるためです。この実践全体が、セキュリティの世界では大きな違いです。
機密データ(認証データや承認データなど)のキャッシュは、セキュリティのためにこれまでに実行できる最悪のことです。つまり、古い情報を信頼しています。 JWTの上に構築されたすべての現在の認証システムは、このナイーブに悩まされています。
JWTを使用してサイト/ APIを「高速化」しようとするうさぎの穴を掘り下げたら、すでにセキュリティの罪を犯しており、危険にさらされています。
さらに、人々がJWTの使用を開始し、危険にさらされていることに気づいたら、(他のコメンターが示唆しているように)すべてを集中化して失効リストの使用を開始し、悪いことが発生したときにトークンを取り消すことができるようにします。これにより、従来のセッション管理と同じ速度のペナルティが発生しますが、JWTがセッションCookieよりも「重い」ため、速度が低下するため、速度が低下します。
申し訳ありませんが、ここに私のアドバイスがあります:
機密性の高いものを作成する場合は、可能であればサーバー側のセッションCookieを使用してください。さもないと?詳細を気にせず、流れに沿って進んでください。
IMOには2つの適切なオプションがあります。