ASP.NET MVC 使用 FormsAuthentication 保存的用户登录凭证总是很快就失效了

问题

使用 FormsAuthentication.Encrypt 加密的 FormsAuthenticationTicket ,总是在一小段时间后 (没注意统计,大概在 20 分钟左右) 就自动失效了,但我设置的 Cookie 失效时间为 30 天。
Cookie 中该 Ticket 还在,但是在 Decrypt 的时候失败。具体什么错误也不清楚(猜测是【无法验证数据 / Unable to validate data】)。Decrypt 失败后结果是空,权限验证失败。

对策

参照多个服务器共享 Form 验证,使用了固定的 machineKeyvalidationKeydecryptionKey )之后,问题貌似解决了。

原因

猜测是因为没有固定设置 machineKey 时,会随机生成(保存在哪里不清楚)key,而且在固定时间后这个 key 消失了,从而导致解密失败。


参考:web config 配置:authentication 配置节