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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:48:29