4

Angular SPA フロントエンドのバックエンドとして ASP.NET Core API を使用しています。ID プロバイダーとしてCognitoを使用しており、OpenId-Connect 認証を作成したいと考えています。authorization code flowこれは、すべての秘密の資格情報がバックエンドに保存されることを意味します。

認証フローは次のようになります (標準の OpenID Connect フロー)。

  1. FE アプリケーションはエンドポイントを呼び出し、ホストされた UI/authorizeにリダイレクトされます。Cognito
  2. クレデンシャルを入力すると、FE は認証コードを受け取ります。
  3. FE は認証コードを使用して BE を呼び出します。
  4. BE は/tokenエンドポイントを呼び出し、 および を受信accessTokenrefreshTokenます。
  5. BEaccessTokenは FE に戻り、Cookie として設定refreshTokenしますhttpOnly(これについては不明ですが、Redis キャッシュに保存する場合があります)。

次に、リクエストごとに FE がBearer AccessToken認証に追加されます。AccessTokenの有効期限が近づくと、 を使用して更新されますrefreshToken

私はこの例を試していましたが、ここではアプリケーションが認証に Asp.Net Core Cookie を使用しaccessTokenrefreshToken. accessToken有効期限が切れた後でも認証されました。また、ASP.NET Cookie の仕組みに関するドキュメントはあまりありません。

そのため、カスタム BE エンドポイントを使用してIdentityModel ヘルパー メソッドを使用することを考えていますが、このような認証を処理することが適切な方法であるかどうかはわかりません。

  • /Login- 取得AccessTokenしてRefreshToken
  • /Refresh-AccessTokenを使用して更新しRefreshTokenます。accessToken有効期限が近づくと、FE は手動で呼び出します。

IdentityModelでは、カスタム実装を作成せずにこのシナリオを適切に処理する「推奨される」方法はありますか?

また、私が知る限り、BE に送信される各リクエストに追加される Cookie に保存することは非常に一般的ですがrefreshToken、各リクエストに既に追加しhttpOnlyた場合は、その意味がわかりません。accessTokenrefreshToken

refreshTokenパフォーマンスとセキュリティ上の理由から、BE 内に格納する方がよいのではないでしょうか?

認証はすべてのアプリケーションの一部であるため、フレームワーク機能も組み込まれている必要があると思いますauthorization code flow

4

1 に答える 1