C# 如何在仅使用外部身份提供程序而不调用HttpContext.SignInAsync的情况下保持cookie身份验证

C# 如何在仅使用外部身份提供程序而不调用HttpContext.SignInAsync的情况下保持cookie身份验证,c#,asp.net-core,C#,Asp.net Core,我的主应用程序完全依赖于我的外部OIDC IDP(IdentityServer 4)进行cookie+OIDC身份验证。它没有任何登录页面或代码,而只使用[Authorize]属性 因此,我的Startup.cs配置非常简单,如下所示: services.AddAuthentication(options => { options.DefaultScheme = "Cookies"; options.DefaultChallengeScheme

我的主应用程序完全依赖于我的外部OIDC IDP(IdentityServer 4)进行cookie+OIDC身份验证。它没有任何登录页面或代码,而只使用
[Authorize]
属性

因此,我的Startup.cs配置非常简单,如下所示:

 services.AddAuthentication(options =>
 {
     options.DefaultScheme = "Cookies";
     options.DefaultChallengeScheme = "OpenIdConnect";
 })
 .AddCookie()
 .AddOpenIdConnect("OpenIdConnect", options =>
 {
      options.SignInScheme = "Cookies";
      //... ...
 });
这是典型的设置,其中OIDC中间件在身份验证后使用相同的
Cookies
方案

它按预期工作,但问题是以这种方式编写的
Cookies
仅用于会话。因此,每当用户在应用程序中启动一个新会话时,它都必须联系IDP(IDP可以让用户保持登录并重新定向)

现在,为了减少对IDP的点击,我想将主应用的身份验证cookie保留一段时间,比如1天

但是我想不出一个配置这个的方法。我通常知道,如果像在登录页面中那样手动调用
HttpContext.SignInAsync
,我可以在
IsPersistent
设置为true的情况下传入
AuthenticationProperties
。但我的主应用程序没有任何登录页面或逻辑

我尝试在
.AddCookie()
中配置cookie过期时间,但没有帮助,可能是因为
ispersist
未设置为true

我假设有一些其他的配置或事件,我可以挂接到使这项工作。非常感谢您的帮助

您可以处理事件并在此处设置
AuthenticationProperties

services.AddAuthentication(...)
    .AddCookie(options =>
    {
        options.Events.OnSigningIn = ctx =>
        {
            ctx.Properties.IsPersistent = true;
            return Task.CompletedTask;
        };
    })