問題タブ [identitymodel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 更新トークンが機能しなくなったときにログインを強制する
Identity Server 4 で OpenID Connect を使用している ASP.net コア 3.1 MVC アプリケーションがあります。IdentityModel を使用して、アプリケーションのアクセス トークンを自動的に更新しています。構成は次のようになります。
その ID サーバーを使用して保護されているダウンストリーム API からデータをプルするコントローラーがあります。私の MVC クライアントは、更新トークンを取得するためにスコープ api1 と offline_access を要求します。これらのトークンはSaveTokens = true
、サービスに設定されているため、Cookie に保存されます。
すべてが正常に機能しています。ログインすると、アクセス トークンとリフレッシュ トークンを取得します。アクセス トークンを約 20 分間保持し、有効期限が切れると、更新トークンを使用してトークン エンドポイントを呼び出し、新しいアクセス トークンと更新トークンを取得します。
対処方法がわからないシナリオの 1 つは、リフレッシュ トークンの有効期間が過ぎた場合です。リフレッシュ トークンの有効期間を 8 時間に設定しても、MVC セッションがまだアクティブな場合、新しいリフレッシュ トークンを取得しようとして失敗します。
この更新トークンの取得に失敗したときにそれを検出する、処理できる OpenID 接続ミドルウェアのイベントがあり、それを使用して何らかの方法でログイン (または少なくとも ID サーバー /authorize エンドポイントへの往復) を強制することはできますか?
asp.net-core - IdentityModel を使用した JWT トークンによる Asp.Net Core API OpenId-Connect 認証
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
。
uwp - IdentityServer からログアウトしても WebView ポップアップが閉じない
UWP アプリで使用IdentityModel.OidcClient
し、Azure AD に接続しました。ログイン Web ビューが開き、自動的に閉じますが、ログアウト ポップアップは自動的に閉じません。
私の実装はこれに基づいています。ログアウトが発生すると、最後の関数呼び出しがここに移動しますが、ポップアップが手動で閉じるまで、このAuthenticateAsync
関数呼び出し内で実行がハングします。