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

ASP.NET Core:新建ApplicationUser的登录时长及相关问题

Blazor WASM匿名用户认证问题解答

场景说明

我正在开发一个Blazor WASM Web应用,在Web API端点中可以通过以下代码将匿名用户认证为"Alice",且无需将任何数据存储到数据库中:

var user = new ApplicationUser();
user.Email = "test@awesomemail.makeitwork";
user.UserName = "Alice";

await _signInManager.SignInAsync(user, false);

问题与解答

1. SignInManager未将用户数据存入数据库时,如何追踪Alice?

调用SignInManager.SignInAsync时,系统会生成一个加密的认证Cookie,把用户的核心身份信息(比如用户名、Email以及相关声明)都打包进去。后续客户端发请求时会自动带上这个Cookie,服务器只要解密Cookie就能识别出当前请求的用户是"Alice",全程不需要依赖数据库存储用户数据。

2. 该方式下用户的认证时长是多久?是只要客户端保留Cookie就有效,还是服务器重启后失效?

认证时长由Cookie的配置决定:

  • 你代码里SignInAsync的第二个参数传了false,这是会话Cookie,默认用户关闭浏览器就会失效;如果传true,会生成持久化Cookie,有效期由认证配置里的ExpireTimeSpan参数设定。
  • 服务器重启不会让已有的Cookie失效,因为Cookie是加密后存在客户端的,只要服务器的加密密钥没换,重启后依然能正常解密识别用户身份。

3. SignInManager是否会在一段时间后移除"缓存"的用户?

不存在服务器端的用户缓存——因为你根本没把这个用户存到数据库或服务器缓存里。所有身份信息都存在客户端的Cookie中,服务器不会主动去"移除"这个用户,只要Cookie没过期、能被正确解密,服务器就会认可这个身份。

4. 若问题3的答案为是,我能否提供一个端点,当用户仍持有对应Cookie时自动重新分配"Alice"匿名身份?

既然问题3的答案是否,不过如果后续你调整了逻辑(比如加入服务器端缓存或会话存储),或者需要处理Cookie即将过期的情况,完全可以做这样的端点:

  • 让客户端请求时携带现有认证Cookie,服务器解密后验证身份有效性;
  • 如果Cookie有效但需要重新生成(比如延长有效期),可以直接复用Cookie里的用户信息,重新创建ApplicationUser实例并调用SignInAsync,生成新的Cookie返回给客户端;
  • 就算没有服务器端存储,只要能解密Cookie里的用户数据,就能快速重新签发身份。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:37:15