.NET Core 3.1 & Windows 身份验证终止会话变量

.NET Core 3.1 & Windows Authentication Kills Session Variables

每当我在我的 .NET Core 3.1 应用程序上启用 Windows 身份验证时,我的会话变量似乎不再跨请求持续存在。每当我关闭 Windows 身份验证时,会话变量就会再次工作。

我在 Startup.cs 的 ConfigureServices() 部分启用了会话变量:

public void ConfigureServices(IServiceCollection services)
{
//......
    services.AddSession(delegate (SessionOptions options)
    {
        options.IdleTimeout = TimeSpan.FromSeconds(1800);
        options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
        options.Cookie.SameSite = SameSiteMode.Strict;
        options.Cookie.HttpOnly = true;
        options.Cookie.IsEssential = true;
    });
//......
} 

我使用 web.config:

启用了 Windows 身份验证
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <remove name="aspNetCore" />
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" hostingModel="InProcess" disableStartUpErrorPage="false">
        <environmentVariables>
          <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
        </environmentVariables>
      </aspNetCore>
      <security>
        <authentication>
          <windowsAuthentication enabled="true" />
          <anonymousAuthentication enabled="false" />
        </authentication>
      </security>      
    </system.webServer>
  </location>
</configuration>

我在一个 Razor 页面中设置了这样的会话变量 (SET.cshtml):

<div>
    @Context.Session.SetString("testvar", "123");
</div>

在另一个 Razor 页面 (GET.cshtml),我检查变量是否持续存在:

<div>
    @Context.Session.GetString("testvar")
</div>

当在 web.config 中启用 Windows 身份验证时,会话变量“testvar”在从 SET.cshtml 到 GET.cshtml 时不会保留(GET.cshtml应该显示“123”但它没有)。当我禁用 Windows 身份验证时,它再次开始工作(GET.cshtml 正确显示“123”)。

可能是什么问题?

我想通了这个问题。我没有在 Startup.cs.

中调用“app.UseAuthorization()”

app.UseAuthorization() 需要在 Startup.cs 的 Configure() 方法中调用,以便在 .NET Core 中启用 Windows 身份验证时会话变量在请求中保持不变: