.NET Framework 2.0遗留应用容器化后Forms认证失败求助
问题场景
将连接Docker外部主机SQL Server的.NET Framework 2.0遗留应用容器化后,登录页面可正常显示,但尝试连接SQL Server时抛出异常:
The type initialiser for 'class' threw an exception
最初误以为是Docker无法连接主机SQL Server,查看容器内应用日志后,发现实际问题与机器密钥失效有关,日志内容如下:
事件代码: 4005 事件消息: 请求的Forms身份验证失败。原因: 提供的票据无效。 事件时间: 2024/7/29 17:02:30 事件时间(UTC): 2024/7/29 16:02:30 事件ID: 35ad1e99c62b4667b240c19a0c3e945f 事件序列: 2 事件发生次数: 1 事件详细代码: 50201 应用程序信息: 应用程序域: /LM/W3SVC/1/ROOT-1-133667425492016462 信任级别: 完全 应用程序虚拟路径: / 应用程序路径: C:\inetpub\wwwroot\ 计算机名称: EC7A5C0027E8 进程信息: 进程ID: 2624 进程名称: w3wp.exe 账户名称: IIS APPPOOL\DefaultAppPool 请求信息: 请求URL: http://localhost/default.aspx 请求路径: /default.aspx 用户主机地址: 192.168.1.21 用户: 是否已认证: 否 认证类型: 线程账户名称: IIS APPPOOL\DefaultAppPool 待认证名称: 自定义事件详细信息:
解决方案
Forms认证票据无效的核心原因是容器环境的机器密钥与原应用环境不一致,导致加密/解密认证票据失败。针对.NET Framework 2.0应用,可按以下步骤处理:
指定固定机器密钥:在应用的
web.config中添加<machineKey>配置,使用原环境的机器密钥(或生成新的固定密钥),确保容器内应用与原环境使用相同的密钥进行加密解密。示例配置:<configuration> <system.web> <machineKey validationKey="YOUR_VALIDATION_KEY" decryptionKey="YOUR_DECRYPTION_KEY" validation="SHA1" decryption="AES" /> </system.web> </configuration>注意:密钥可通过工具生成,或从原应用服务器的
machine.config中获取。清理旧认证票据:测试前清除浏览器缓存中的旧认证Cookie,避免残留的无效票据干扰测试。
内容的提问来源于stack exchange,提问作者Vinnie
相关产品推荐
相关产品推荐

