Angular SPA フロントエンドのバックエンドとして ASP.NET Core API を使用しています。ID プロバイダーとしてCognitoを使用しており、OpenId-Connect 認証を作成したいと考えています。authorization code flow
これは、すべての秘密の資格情報がバックエンドに保存されることを意味します。
認証フローは次のようになります (標準の OpenID Connect フロー)。
- FE アプリケーションはエンドポイントを呼び出し、ホストされた UI
/authorize
にリダイレクトされます。Cognito
- クレデンシャルを入力すると、FE は認証コードを受け取ります。
- FE は認証コードを使用して BE を呼び出します。
- BE は
/token
エンドポイントを呼び出し、 および を受信accessToken
しrefreshToken
ます。 - BE
accessToken
は FE に戻り、Cookie として設定refreshToken
しますhttpOnly
(これについては不明ですが、Redis キャッシュに保存する場合があります)。
次に、リクエストごとに FE がBearer AccessToken
認証に追加されます。AccessToken
の有効期限が近づくと、 を使用して更新されますrefreshToken
。
私はこの例を試していましたが、ここではアプリケーションが認証に Asp.Net Core Cookie を使用しaccessToken
、refreshToken
. accessToken
有効期限が切れた後でも認証されました。また、ASP.NET Cookie の仕組みに関するドキュメントはあまりありません。
そのため、カスタム BE エンドポイントを使用してIdentityModel ヘルパー メソッドを使用することを考えていますが、このような認証を処理することが適切な方法であるかどうかはわかりません。
/Login
- 取得AccessToken
してRefreshToken
/Refresh
-AccessToken
を使用して更新しRefreshToken
ます。accessToken
有効期限が近づくと、FE は手動で呼び出します。
IdentityModel
では、カスタム実装を作成せずにこのシナリオを適切に処理する「推奨される」方法はありますか?
また、私が知る限り、BE に送信される各リクエストに追加される Cookie に保存することは非常に一般的ですがrefreshToken
、各リクエストに既に追加しhttpOnly
た場合は、その意味がわかりません。accessToken
refreshToken
refreshToken
パフォーマンスとセキュリティ上の理由から、BE 内に格納する方がよいのではないでしょうか?
認証はすべてのアプリケーションの一部であるため、フレームワーク機能も組み込まれている必要があると思いますauthorization code flow
。