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
相关产品推荐
相关产品推荐

