You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 6.0中特定认证方案无法正常授权的问题

问题分析与解决方案

你的问题核心在于登录时使用的认证方案和授权时指定的"SchemeName"不匹配:

  • 仅使用[Authorize]时,系统会用默认认证方案验证身份,而你登录时恰好依托这个默认方案完成了认证,因此能正常访问。
  • 但指定[Authorize(AuthenticationSchemes = "SchemeName")]后,系统只会校验属于"SchemeName"方案的身份,可你登录时并未用该方案签发认证凭证,导致授权失败触发登录页重定向——此时User.Identity.IsAuthenticated显示true,是因为默认方案的身份仍处于有效状态。

解决方法

方法1:将"SchemeName"设为全局默认认证方案

修改Program.cs中的认证配置,把自定义Scheme设为全局默认,让登录和授权流程自动使用它:

builder.Services.AddAuthentication("SchemeName") // 指定默认方案为"SchemeName"
    .AddCookie("SchemeName", options =>
    {
        options.LoginPath = "/identity/account/login";
    });

方法2:登录时明确指定使用"SchemeName"方案

若不想修改全局默认方案,需在登录逻辑中显式指定用"SchemeName"签发认证Cookie。例如在登录Action中:

// 假设已构建好身份凭证ClaimsPrincipal
var principal = new ClaimsPrincipal(/* 你的身份信息 */);
await HttpContext.SignInAsync("SchemeName", principal);

额外说明(若使用ASP.NET Core Identity)

如果用的是Identity框架默认登录功能,它默认使用Identity.Application作为Scheme。此时需修改Identity配置,让它适配你的自定义Scheme:

builder.Services.AddIdentity<IdentityUser, IdentityRole>(options => /* 配置选项 */)
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders()
    .AddDefaultUI()
    .AddCookieAuthentication(options =>
    {
        options.LoginPath = "/identity/account/login";
    }, "SchemeName"); // 指定Identity使用的Cookie Scheme为"SchemeName"

这样Identity的登录逻辑会自动用"SchemeName"签发凭证,与授权时指定的Scheme匹配,即可正常通过授权。

内容的提问来源于stack exchange,提问作者joeshmoe301

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 05:15:28