在ASP.NET Core应用中,Authentication身份验证中间件是处理用户身份校验的核心组件,通过合理的配置可以实现Cookie、JWT、OAuth等多种身份验证方案,保障应用资源的安全访问。

身份验证中间件的核心作用
Authentication中间件主要负责在请求到达应用处理逻辑之前,校验请求中携带的身份凭证,解析出用户身份信息,并将身份信息附加到当前请求上下文的User属性中,后续的业务逻辑可以直接获取用户身份进行权限判断。
基础配置步骤
1. 注册身份验证服务
首先需要在Program.cs文件中注册身份验证相关的服务,根据需求选择对应的身份验证方案,以下是注册Cookie身份验证方案的示例:
// 注册身份验证服务,配置Cookie身份验证方案
builder.Services.AddAuthentication(options =>
{
// 设置默认的身份验证方案为Cookie
options.DefaultScheme = "CookieAuth";
// 设置默认的登录挑战方案为Cookie
options.DefaultChallengeScheme = "CookieAuth";
})
.AddCookie("CookieAuth", options =>
{
// 设置登录页面的路径
options.LoginPath = "/Account/Login";
// 设置无权限访问时的跳转路径
options.AccessDeniedPath = "/Account/AccessDenied";
// 设置Cookie的过期时间
options.ExpireTimeSpan = TimeSpan.FromHours(2);
});
2. 添加身份验证中间件
服务注册完成后,需要在请求管道中添加身份验证中间件,注意中间件的添加顺序,要放在路由中间件之前,授权中间件之前:
var app = builder.Build(); // 其他中间件配置... // 添加身份验证中间件 app.UseAuthentication(); // 添加授权中间件,依赖身份验证中间件的结果 app.UseAuthorization(); // 路由中间件配置 app.MapControllers(); app.Run();
常见身份验证方案配置
JWT身份验证配置
如果是开发Web API,通常会使用JWT身份验证方案,需要先安装Microsoft.AspNetCore.Authentication.JwtBearer NuGet包,然后按如下方式配置:
// 注册JWT身份验证服务
builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
// 是否验证签发者
ValidateIssuer = true,
// 签发者地址
ValidIssuer = "https://ipipp.com",
// 是否验证接收者
ValidateAudience = true,
// 接收者地址
ValidAudience = "https://ipipp.com",
// 是否验证密钥
ValidateIssuerSigningKey = true,
// 签名密钥
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("this_is_a_secure_key_for_jwt_demo")),
// 是否验证令牌过期时间
ValidateLifetime = true
};
});
身份验证的使用示例
配置完成后,可以在控制器或接口方法上使用Authorize特性标记需要身份验证的资源:
[ApiController]
[Route("api/[controller]")]
public class UserController : ControllerBase
{
// 该接口需要身份验证才能访问
[Authorize]
[HttpGet("info")]
public IActionResult GetUserInfo()
{
// 从当前用户身份中获取用户名
var userName = User.Identity.Name;
return Ok(new { UserName = userName });
}
// 该接口允许匿名访问
[AllowAnonymous]
[HttpGet("public")]
public IActionResult GetPublicData()
{
return Ok(new { Message = "这是公开数据" });
}
}
注意事项
- 中间件的添加顺序非常重要,
UseAuthentication必须在UseAuthorization之前,否则授权逻辑无法获取到用户身份信息。 - 不同的身份验证方案可以共存,通过指定
Authorize特性的AuthenticationSchemes属性可以选择使用特定的身份验证方案。 - 生产环境中不要将JWT的签名密钥等敏感信息硬编码在代码中,建议通过配置中心或环境变量获取。
ASP.NET_CoreAuthentication身份验证中间件C#修改时间:2026-07-15 18:03:25