1

Identity Server 4 で OpenID Connect を使用している ASP.net コア 3.1 MVC アプリケーションがあります。IdentityModel を使用して、アプリケーションのアクセス トークンを自動的に更新しています。構成は次のようになります。

services.AddAuthentication(options =>
{
    options.DefaultScheme = "Cookies";
    options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies", options =>
{    
    options.SlidingExpiration = false;
    options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
})
.AddOpenIdConnect("oidc", options =>
{
    options.Authority = "https://localhost:5001";

    options.ClientId = "mvc";
    options.ClientSecret = "secret";
    options.ResponseType = "code";

    options.SaveTokens = true;

    options.Scope.Add("profile");
    options.Scope.Add("api1");
    options.Scope.Add("offline_access");
    options.GetClaimsFromUserInfoEndpoint = true;
    options.SignedOutCallbackPath = "/oidc-signout";
    options.SignedOutRedirectUri = "/goodbye";
});

services.AddAuthorization(options =>
{
    options.DefaultPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
});

services.AddHttpClient("api1", configure =>
{
    configure.BaseAddress = new Uri("https://localhost:6001");
});

services.AddAccessTokenManagement();

その ID サーバーを使用して保護されているダウンストリーム API からデータをプルするコントローラーがあります。私の MVC クライアントは、更新トークンを取得するためにスコープ api1 と offline_access を要求します。これらのトークンはSaveTokens = true、サービスに設定されているため、Cookie に保存されます。

すべてが正常に機能しています。ログインすると、アクセス トークンとリフレッシュ トークンを取得します。アクセス トークンを約 20 分間保持し、有効期限が切れると、更新トークンを使用してトークン エンドポイントを呼び出し、新しいアクセス トークンと更新トークンを取得します。

対処方法がわからないシナリオの 1 つは、リフレッシュ トークンの有効期間が過ぎた場合です。リフレッシュ トークンの有効期間を 8 時間に設定しても、MVC セッションがまだアクティブな場合、新しいリフレッシュ トークンを取得しようとして失敗します。

この更新トークンの取得に失敗したときにそれを検出する、処理できる OpenID 接続ミドルウェアのイベントがあり、それを使用して何らかの方法でログイン (または少なくとも ID サーバー /authorize エンドポイントへの往復) を強制することはできますか?

4

1 に答える 1