如何在ASP.NET Core 8 Web API中配置Cookie身份验证机制?
要让/login?useCookies=true返回的Cookie实现身份验证,你需要调整认证方案的默认配置并完善Cookie参数设置,以下是具体修改步骤:
1. 核心配置调整要点
原代码默认仅启用Bearer Token认证,需将Cookie认证设为默认方案,并补充Cookie的安全与有效期配置。
2. 修改后的完整Program.cs代码
using Backend.Api.Data; using Microsoft.AspNetCore.Identity; var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); // 注册数据库上下文 builder.Services.AddDbContext<AppDbContext>(); // 配置Identity并启用内置API端点 builder.Services.AddIdentityApiEndpoints<IdentityUser>() .AddEntityFrameworkStores<AppDbContext>(); // 设置Cookie为默认认证方案,同时保留Bearer Token支持(可选) builder.Services.AddAuthentication(IdentityConstants.ApplicationScheme) .AddBearerToken(IdentityConstants.BearerScheme); // 配置Application Cookie的具体参数 builder.Services.ConfigureApplicationCookie(options => { options.Cookie.HttpOnly = true; // 禁止前端JS访问,提升安全性 options.ExpireTimeSpan = TimeSpan.FromMinutes(5); // Cookie有效期5分钟 options.SlidingExpiration = true; // 用户活动时自动延长有效期 options.Cookie.SameSite = SameSiteMode.Lax; // 跨域场景可调整为None(需配合HTTPS) options.Cookie.SecurePolicy = CookieSecurePolicy.Always; // 仅在HTTPS环境下传输Cookie }); builder.Services.AddAuthorization(); var app = builder.Build(); app.UseHttpsRedirection(); // 中间件顺序必须严格:认证在前,授权在后 app.UseAuthentication(); app.UseAuthorization(); // 映射Identity内置API端点 app.MapIdentityApi<IdentityUser>(); app.MapControllers(); app.Run();
关键修改说明
- 默认方案切换:将
AddAuthentication的默认方案改为IdentityConstants.ApplicationScheme(Cookie认证方案),让系统优先使用Cookie验证身份。 - 兼容Bearer Token:通过
AddBearerToken保留Bearer认证支持,若不需要兼容可移除该行。 - 安全强化配置:补充
SameSite和SecurePolicy,这是生产环境下的必要安全设置,避免Cookie被非法窃取或滥用。
验证步骤
- 调用
POST /login?useCookies=true接口,传入合法用户名密码,响应头会返回Set-Cookie字段。 - 后续请求API时,浏览器会自动携带该Cookie(或手动在请求头添加
Cookie: {Cookie内容}),即可通过身份验证。
内容的提问来源于stack exchange,提问作者Petr Adam
相关产品推荐
相关产品推荐

