ASP.. NET FormsAuthentication:重新启动应用程序时必须重新登录
本文关键字:新登录 登录 FormsAuthentication NET 重新启动 应用程序 ASP | 更新日期: 2023-09-27 18:09:02
我有一个ASP。. NET应用程序使用FormsAuthentication。每当我重新启动应用程序或web服务器时,我的身份验证令牌无效,我必须再次登录。出了什么问题?
默认情况下,FormsAuthentication通过让客户端存储数据的加密副本来验证每个请求的身份验证数据。加密密钥存储在Machine.config
中。要使用的特定键在<machineKey decryptionKey="YOUR KEY HERE">
中。
如果不提供解密密钥,则在应用程序启动时自动生成一个。由于它是随机生成的,因此每次重新启动应用程序时都会有所不同。在验证阶段,FormsAuthentication尝试解密身份验证数据,但失败了。此用户将不再登录。
解决这个问题有两种方法。
- 在
Machine.config
中提供一个machineKey将为FormsAuthentication提供一个一致的密钥,因此验证将与以前运行的应用程序加密的cookie成功。 - 在Web中使用
<forms protection="None" ... />
。Config将禁用身份验证数据加密和验证。这是不安全的,只适合于开发,因为用户互相冒充是微不足道的。
在asp.net中默认的会话状态模式是进程内(缓存在内存中),除非你另有指定。当应用程序关闭时,内存将被清除,因此进程内会话缓存将丢失。
@dhasenan只有当应用程序部署在web农场或云上时,machinekey配置才会成为一个问题。重写Machinekey元素的机器级配置的想法是确保多台机器使用完全相同的密钥。
因此,机器密钥不应该是一个问题,因为如果在应用程序级别没有提供机器密钥,则机器密钥在机器中。将使用Config,它是持久的和静态的,因此不会在会话之间重新生成。