現在のアーキテクチャには、OpenID Connectを介してJWTトークンを提供する認証サーバーがあり、実装したコードフローを使用する任意のWebアプリケーションに接続しています。
認証済みのWebアプリケーションをステートレスにするために、OpenID Connectを実装する面倒に(主に authlib のおかげで)行きました。また、JWTを渡すことで、ユーザーを再認証せずにアプリ間でリクエストを行うこともできます。とても便利です...
今、私は次の問題に直面しています:上記のWebアプリケーションの1つがコードフロー全体をもう一度通過するのではなく、トークンを更新したい場合、バックエンドの安全な場所に更新トークンを格納する必要があります。
悲しいことに、これは私が探していたステートレス認証を壊し、そのため、最初は何も必要としなかったWebアプリケーションのそれぞれに何らかのソートデータベースをマウントする必要があります。
ステートレスな方法でJWTを更新する方法はありますか?または、私の質問を言い換えると、ステートレスアプリケーションのどこに更新トークンを保存できますか?
単に答えは「リフレッシュトークンを使用しない」です。これは、SPA、API、IDプロバイダーがある場合にシステムが機能することを想定していないためです。ドキュメントは、SPAが支配的になる前にずっと前に設計されたため、この点で少し混乱しています。主な問題は、最初はおそらくAPIサーバーを依存パーティと見なし、angularアプリケーションを単なる「フロント」と見なしたことです。少なくとも私が抱えていた問題でした。それは単にそうではありません。
ここでの要点は次のとおりです。
次の質問は、どの承認付与フローを使用する必要があるかです。答えはPKCEです。既知のセキュリティ違反があるため、暗黙的に使用することは望ましくありません。クライアントシークレットをangularアプリに配置する必要があるため、従来のコードフローを使用することはできません。幸い、PKCEが作成されたのはまさにそのためです。 https:// tools .ietf.org/html/rfc7636
そしてそれを実装するには、2つのものが必要です。
そこに着くと、システムはおそらくあなたのニーズに合うでしょう: