ASP.NET Core 2.0 Identity 中 Cookies.ApplicationCookie.AutomaticChallenge = false 的替代品是什么?

What is the replacement for Cookies.ApplicationCookie.AutomaticChallenge = false in ASP.NET Core 2.0 Identity?

我从 ASP.NET Core 1.1 升级到 2.0,现在 401 未经授权的响应已更改为 302 重定向响应。这以前是我在 1.1 中遇到的问题,并通过以下代码得到缓解:

services.AddIdentity<User, IdentityRole>(identityOptions =>
{
    identityOptions.Cookies.ApplicationCookie.AutomaticChallenge = false;
})

但是,identityOptions 上不再有 Cookies 属性。

我也尝试添加以下内容(同时请注意,我之前在我的应用程序中不需要此扩展方法):

services.AddCookieAuthentication(cookieAuthenticationOptions => {
    cookieAuthenticationOptions.LoginPath = ""; // also tried null
    cookieAuthenticationOptions.AccessDeniedPath = ""; // also tried null
    cookieAuthenticationOptions.LogoutPath = ""; // also tried null
});

该代码似乎对默认重定向路径或行为没有影响。我怎样才能在 Core 2.0 中阻止这些重定向?

https://github.com/aspnet/Announcements/issues/262 中所述,您现在必须使用 services.AddAuthentication() 扩展在全局级别配置默认方案处理程序。

为了防止 Identity 注册的 cookie 处理程序处理挑战,请将 DefaultChallengeScheme 替换为对应于不同处理程序(例如 JWT 承载处理程序)的方案。

services.AddIdentity<User, IdentityRole>();

services.AddAuthentication(options =>
{
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
});

如果 - 无论出于何种原因 - 选择不同的处理程序不适合您,那么您将不得不使用 services.ConfigureApplicationCookie() 注册自定义 CookieAuthenticationEvents.(On)RedirectToLogin 事件以更改身份 returns一个"unauthorized response".

这是一个返回 401 响应的示例:

services.ConfigureApplicationCookie(options =>
{
    options.Events.OnRedirectToLogin = context =>
    {
        context.Response.StatusCode = 401;

        return Task.CompletedTask;
    };
});