REST APIに短期間のアクセストークンと長期の更新トークンを使用して、トークンベースの認証システムを実装しています。これは、関連するAPIエンドポイントの概要です(HTTPSはすべてのエンドポイントに適用):
POST /register/
POST /login/
POST /logout/
POST /password/change/
POST /register/
:
POST /login/
:
/register/
と同じで、アクセストークンと更新トークンをJSONで返します。POST /logout/
:
Authorization
ヘッダー内のrefreshトークンをBearer
トークンとして送信します。POST /password/change/
:
Authorization
ヘッダーでBearer
トークンとして送信し、古いパスワードと新しいパスワードをHTTPS経由でJSONで送信します。HttpOnly
Cookieにsecure
を付けてトークンを保存することです。国旗。承認は引き続きAuthorization
ヘッダーを介して行われますが、クライアントが最初にロードするときに、Cookieに有効な更新トークンが含まれているかどうかをチェックするエンドポイントにGET
リクエストを送信できます。そのため、JSONでユーザーに返します。つまり、Cookieが実際に使用されるのは、Cookie内の更新トークンをクライアントに返すときだけです。このアプローチは安全ですか? Cookieから更新トークンを要求するときに副作用がないため、CSRFを防ぐことができると思いますが、攻撃者が更新トークンを傍受する別の方法があります(HTTPSを想定)?このアプローチは安全ですか?具体的には:
- HTTPS経由で行われる場合、JSONを介したユーザー名とパスワードの送信は安全ですか?
はい。ヘッダー、要求パラメーター、および要求本文は、通信中に暗号化されます。
サーバー側では、リクエストの本文をログに記録しないでください:-)
- 無許可のドメインがこのエンドポイントに電話をかけることをどのように防ぐことができますか?
できません。基本的に、APIがWWWに公開されると、あらゆる種類の悪意に自動的にさらされます。あなたができる最善のことは、準備をして脅威を認識することです。少なくともあなたに関係するものについて。 こちらをご覧ください 。
この問題への可能なアプローチは、 API Manager を実装(または縮小)することです。
AMの背後にあるすべてのエンドポイントが必ずしもパブリックであるとは限らないため、オンプレミスAPIマネージャーは攻撃対象を減らすことができます。
クラウド内の一部の製品で同じ結果を得ることができますが、それらは主流にとっては驚くほど高価です。
とにかく、API管理エンドポイントは攻撃にさらされたままになります。
- さらに、プログラムによるログインを防ぐにはどうすればよいですか?
プログラムによるログインによってブルートフォースによる攻撃を意味する場合、threshold(1秒あたりの許可されるリクエストの最大数)とブラックリストで十分です。攻撃者の主張。詳細については、 こちら をご覧ください。
API Managerの多くは、すぐに使用できるAPIレート制限構成と Whitelists を提供します。
Google API Consoleに精通している場合は、API Managerが何を実行できるかを推測できます。
- 更新トークンは、データベースに保存する前にハッシュ化する必要がありますか、それとも単なる偏執狂ですか?
更新トークンがプレーンなUUIDであるかどうかに関係なく、この種の実装の詳細を公開したくありません。だから私はそれをハッシュ化することをお勧めします。私にとって、セキュリティ層の実装の詳細は不透明であるほど良いです。
JWTのセキュリティについては、 こちら をご覧ください。
- クライアントがWebブラウザーの場合、更新トークンをクライアントに安全に保存するにはどうすればよいですか?
JSON Web Token(JWT)-クライアント側のストレージ に興味があるかもしれません。