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

如何在ASP.NET Core中配置多种身份验证方案并存?

多认证方案配置方法

核心配置思路

ASP.NET Core支持同时注册多个认证方案,你之前的问题源于重复调用AddAuthentication并指定不同默认Scheme导致冲突,正确做法是在一次AddAuthentication调用中添加所有认证处理程序,再按需设置默认Scheme或通过授权规则指定使用的方案。

具体代码实现

1. 注册多个认证方案

在Program.cs中配置服务时,一次性注册Negotiate(AD认证)和Cookie(用户名密码认证):

// 注册两种认证方案,可指定一个默认Scheme(比如默认用AD认证)
builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
    // 添加AD域认证
    .AddNegotiate()
    // 添加用户名密码的Cookie认证
    .AddCookie("Auth1", options => 
    {
        options.Cookie.Name = "Auth1";
        // 配置登录路径,当需要Cookie认证时跳转至此
        options.LoginPath = "/Account/Login";
        // 可选:配置Cookie过期、SameSite等参数
        options.ExpireTimeSpan = TimeSpan.FromHours(8);
        options.SameSite = SameSiteMode.Lax;
    });

2. 按场景指定认证方案

通过[Authorize]属性或授权策略,控制不同页面/接口使用的认证方式:

指定单一认证方案

// 仅允许AD域用户访问
[Authorize(AuthenticationSchemes = NegotiateDefaults.AuthenticationScheme)]
public IActionResult AdExclusivePage()
{
    return View();
}

// 仅允许用户名密码登录的用户访问
[Authorize(AuthenticationSchemes = "Auth1")]
public IActionResult PasswordExclusivePage()
{
    return View();
}

允许任意一种认证方式

// 接受AD或Cookie认证的用户访问
[Authorize(AuthenticationSchemes = $"{NegotiateDefaults.AuthenticationScheme},Auth1")]
public IActionResult MultiAuthPage()
{
    return View();
}

用授权策略统一管理

如果多个页面需要相同的认证规则,可以定义全局策略:

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("AllowAnyAuth", policy =>
    {
        policy.AuthenticationSchemes.Add(NegotiateDefaults.AuthenticationScheme);
        policy.AuthenticationSchemes.Add("Auth1");
        policy.RequireAuthenticatedUser();
    });
});

然后在控制器/Action上引用:

[Authorize(Policy = "AllowAnyAuth")]
public IActionResult PolicyBasedPage()
{
    return View();
}

3. 提供认证入口(可选)

如果需要让用户选择认证方式,可以做一个入口页面,提供两个选项:

  • AD登录:直接跳转至需要AD认证的页面(比如/AdExclusivePage),会自动触发Negotiate认证流程
  • 用户名密码登录:跳转至表单登录页面(/Account/Login),提交后生成Auth1 Cookie

参考方法

  • 查阅ASP.NET Core官方文档中「多种认证方案」相关内容,了解认证处理程序的注册逻辑与授权规则的匹配方式
  • 分别参考Cookie认证、Negotiate认证的官方配置指南,结合场景调整参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:20:35