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

.NET 5使用Cookie认证方案时Cookie无法正常添加问题咨询

核心问题及修复方案

问题1:异步签入方法未等待执行

HttpContext.SignInAsync为异步方法,当前同步Action中直接调用未添加等待逻辑,会导致Cookie写入逻辑未执行完成请求就已重定向返回,无Cookie写入响应。
修复方案:将Action改为异步返回类型,添加await关键字等待签入方法执行完成。

问题2:身份标识未指定认证方案

创建ClaimsIdentity时未传入注册的Cookie认证方案名称,会导致身份被识别为未认证状态,签入逻辑直接跳过,不生成Cookie。
修复方案:构造ClaimsIdentity时传入CookieAuthenticationDefaults.AuthenticationScheme作为第二个参数。


修正后控制器代码

[HttpPost]
[Route("/Login")]
public async Task<IActionResult> Login([Bind] LoginViewModel model)
{
    if (model.Email == "user@fmail.com" && model.PasswordHash == "1234")
    {
        var claims = new List<Claim>
        {
            new Claim(ClaimTypes.Name, "Bar F Har"),
            new Claim(ClaimTypes.Email, "user@fmail.com"),
            new Claim("Age", "25")
        };
        // 传入Cookie认证方案
        var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
        var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
        // 等待异步签入完成
        await HttpContext.SignInAsync(claimsPrincipal);
        return Redirect("/");
    }
    else
    {
        return NotFound();
    }
}

可选补充配置(开发环境适配)

如果上述修改后仍未正常生成Cookie,可补充Cookie安全策略配置适配本地HTTP开发环境:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>
{
    options.Cookie.Name = "Test.Cookie";
    options.LoginPath = "/Login";
    options.Cookie.HttpOnly = true;
    options.Cookie.SameSite = SameSiteMode.Lax;
    // 本地HTTP开发环境关闭安全传输限制,生产环境建议改为Always
    options.Cookie.SecurePolicy = CookieSecurePolicy.None;
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:36:04