Oauth、Oauth2、JWT などに関する投稿が既にたくさんあることは知っています。たくさん読んだことがあり、これまで以上に混乱しているので、明確化を求めています。この件に関する私の見解を提案します。誰かが私の実装が十分に安全かどうか、または私が間違っていることとそれを改善する方法を教えてくれることを願っています.
リソースをユーザーに提供するための API Rest サーバーを構築しています。ユーザーがお金を入金、引き出し、送金できる銀行アプリだとしましょう。
サーバーに nodejs、hapijs、jsonwebtokens、および bcrypt を使用しています。2トークン認証フロー(Oauth2)を実装したい。
これは私がやっている方法です:
ユーザーは、資格情報 (ユーザー名とパスワード) を指定して認証サーバーにログインします。
サーバーはユーザーの資格情報を検証し、有効な場合はユーザーにアクセスを許可し、更新トークンとアクセス トークンを返します。
これらのトークンは、ブラウザーまたはモバイル デバイスのローカル ストレージに保存されます。
access token
:_- jsonwebtoken として署名されています。
- 発行日、有効期限 (5 分)、ユーザー データ (id、ユーザー名) が含まれます。
refresh token
:_- jsonwebtoken として署名され、bcrypt で暗号化されます。
- 一意の識別子が含まれています
- 有効期限が含まれる場合があります
- データベースに保存されます。
が有効である限り
access token
、つまり有効期限が切れておらず、有効なユーザー データが含まれている限り、リソース サーバーは要求されたリソースをユーザーに提供します。が
access token
有効でなくなると、認証サーバーはクライアントにrefresh token
、新しいaccess token
- サーバーは
refresh token
ユーザーから を受け取り、それを解読し、データベース内のものと比較し、取り消されたかどうかを確認し、その一意の識別子を確認します。 refresh token
がすべてのテストに合格すると、サーバーはクライアントに new を発行しますaccess token
。- 1 つのテストに
refresh token
失敗すると、サーバーはユーザーに再認証を要求します。
- サーバーは
注: Cookie の使用を避けようとしています。
質問:
- ユーザーが を盗むことができれば、
access token
も盗むことができると思いrefresh token
ます。では、どうすればrefresh token
より安全にすることができますか? - Oauth2 フローに対する私の見方は正しいですか?
- 何を改善できますか?
- 何か不足していますか?