.NET 8 Blazor Web应用Web场部署:Antiforgery Token问题(MachineKey无效)
.NET 8 Blazor Web场部署Antiforgery解密失败问题排查与解决
你遇到的问题核心原因是:.NET 8的Antiforgery功能依赖ASP.NET Core Data Protection系统,这套系统默认不使用IIS的MachineKey,所以单独配置IIS MachineKey无法解决跨服务器的密钥一致性问题。
下面是具体的解决步骤:
配置共享的Data Protection密钥存储
所有Web服务器需要使用同一套密钥集,适合Windows环境的方式是用共享文件目录(所有服务器可访问的UNC路径)。在项目的Program.cs中添加以下配置:builder.Services.AddDataProtection() .PersistKeysToFileSystem(new DirectoryInfo(@"\\你的共享服务器\dataprotection-keys")) .SetApplicationName("你的Blazor应用名称");注意:必须确保所有服务器的应用程序池账户对这个共享目录拥有读写权限,否则密钥无法正常存储和读取。
验证密钥同步
配置完成后,重启所有服务器上的站点,检查共享目录下是否生成了XML格式的密钥文件。所有服务器应该读取同一个密钥集,这样跨服务器的Antiforgery token就能正常解密。额外注意事项
- 无需依赖负载均衡的粘性会话:只要Data Protection密钥共享配置正确,即使负载均衡把请求分发到不同服务器,token也能正常验证。
- 不要混用两种密钥体系:ASP.NET Core的Data Protection和传统IIS MachineKey是完全独立的,Blazor Web App只认前者,不用再纠结IIS MachineKey的配置。
- 确保所有服务器的.NET 8运行时版本一致,避免因版本差异导致的密钥序列化/反序列化兼容问题。
内容的提问来源于stack exchange,提问作者vbond007
相关产品推荐
相关产品推荐

