部署在Azure App Service上的.NET 6 Blazor Server应用出现数据加密异常问题求助
问题分析
从你描述的情况来看,这个CryptographicException异常大概率和Azure App Service上的数据保护密钥管理有关,而且和你的自定义数据库日志组件产生了联动问题——本地Debug正常、移除日志组件就正常,说明问题出在日志组件调用数据保护服务时的密钥访问环节。
可能的原因及解决办法
Azure App Service默认数据保护密钥的持久化缺陷
Azure App Service默认会把数据保护密钥存在本地临时存储,但这个存储是不稳定的:应用重启、实例缩放或者部署新版本时,密钥可能丢失或无法访问。你的自定义日志组件可能在初始化时用数据保护服务加密了敏感信息(比如数据库连接字符串的部分内容),当密钥不可用时就触发了加密异常。
解决办法:把数据保护密钥持久化到Azure Blob存储或Azure Key Vault,确保密钥在应用变动后依然可用。可以在Program.cs中添加如下配置:var storageAccount = CloudStorageAccount.Parse(Configuration["AzureStorage:ConnectionString"]); var blobClient = storageAccount.CreateCloudBlobClient(); var container = blobClient.GetContainerReference("data-protection-keys"); container.CreateIfNotExistsAsync().Wait(); builder.Services.AddDataProtection() .PersistKeysToAzureBlobStorage(container, "keys.xml");自定义日志组件的数据保护使用方式错误
你的日志组件可能在初始化时没有通过依赖注入正确获取Azure环境下的IDataProtector实例,而是自行创建了服务实例。本地Debug时,数据保护密钥存在用户目录,访问权限无问题;但在Azure App Service上,应用运行身份可能没有默认密钥存储位置的访问权限。
解决办法:检查日志组件中数据保护相关代码,确保通过依赖注入获取IDataProtector;同时显式指定应用名称,避免和其他应用共享密钥:builder.Services.AddDataProtection() .SetApplicationName("YourBlazorAppUniqueName");Azure App Service身份权限不足
如果日志组件用加密凭证访问数据库,且数据保护服务需要访问Key Vault或Blob存储的密钥,可能App Service的系统身份没有对应的访问权限。
解决办法:在Azure Portal中,给你的App Service系统身份分配对应权限——比如Blob存储的「Storage Blob Data Contributor」,或者Key Vault的「Key Vault Secrets User」。
额外排查步骤
- 开启Azure App Service的诊断日志,查看完整异常堆栈,确认异常是在日志组件初始化时触发,还是首次写入日志时触发;
- 本地模拟Azure的临时存储环境,尝试复现异常;
- 检查自定义日志组件的最近更新记录,确认是否修改了数据保护相关逻辑。
备注:内容来源于stack exchange,提问作者DaddyCool

