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

ASP.NET Core使用精简版Identity Framework存储UserID的方案咨询

问题解答

问题1:能否像Session一样用Identity存储这类用户变量?

完全可以,你当前使用的Cookie认证自带的Claims机制就是做这个的,完全不需要引入Identity全套的表结构和冗余功能。
你在生成登录用的claims列表时,直接把UserID作为自定义Claim存入即可,示例代码如下:

// 你原来生成其他Claim的逻辑保留,新增下面这行
claims.Add(new Claim(ClaimTypes.NameIdentifier, "当前登录用户的实际UserID"));

var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
// 后面你原来的登录逻辑保持不变即可

需要取用时,在控制器任意位置都可以直接读取,不需要任何额外存储依赖:

var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);

你的控制器代码修改后就可以直接使用该值:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddFirm([FromBody] FirmModel model)
{
    // 直接从当前登录用户的Claims中取UserID
    var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
    String query = "exec dbo.A2Q_Edit_0112_RR_UploadNewReview_AddFirm @FIRM_NAME, @USER_ID";
    System.Diagnostics.Debug.WriteLine("value:" + model.FIRM_NAME);
    using (var connection = new SqlConnection(connectionString))
    {
        var json = connection.QuerySingle<string>(query, new { FIRM_NAME = model.FIRM_NAME , USER_ID = userId});
        return Content(json, "application/json");
    }
}

问题2:是否有安全的方式利用现有Cookie存储或直接作为UserID使用?

上面提到的Claim存储方式本身就是符合要求的安全方案:

  • 所有存入Claims的内容都会被ASP.NET Core自动加密、签名后存入认证Cookie,前端无法篡改,篡改后的Cookie会直接被服务端校验不通过
  • 默认配置的认证Cookie是HttpOnly属性的,Vue前端的JS代码完全读取不到Cookie内容,不会出现UserID暴露给前端的问题
  • 不需要你自己做任何加密处理,框架原生就做好了全链路安全校验

问题3:ASP.NET Core 3.1 + IIS 8环境下,用Session是否是最优选择?

绝对不是,Session有多个明显的缺陷:

  1. 默认采用内存存储,IIS应用池回收、重启都会导致Session全部丢失,如果后续做多实例部署,Session默认不跨实例共享,需要额外配置分布式Session,增加运维和开发复杂度
  2. 你后续要接入SignalR,而SignalR官方明确说明不支持Session,用Session的话后续还要重构核心逻辑
  3. 相比Claims的无状态特性,Session需要服务端维持存储,性能和可靠性都不如直接用认证Cookie自带的Claims机制

如果后续需要存储的用户自定义字段较多,不建议全部塞进Claims避免Cookie过大影响请求性能,此时可以考虑用分布式缓存(比如Redis)以用户ID为Key存储额外字段,性能和可靠性都远高于Session。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:15:04