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

Azure AD认证报错Unable to unprotect the message.State多实例部署问题求助

错误根因

Unable to unprotect the message.State报错本质是ASP.NET Core Data Protection 密钥未共享导致的:默认配置下加密密钥仅存储在单实例本地内存或磁盘中,多实例部署时,实例A加密生成的身份认证state参数,被路由到实例B时无法用本地密钥解密,就会触发该错误。单实例运行、开发测试环境无多实例场景,所以不会复现问题。

修复步骤
  • 第一步:选择共享密钥存储方案,以下两种是适配Azure App Service Linux容器部署的常用方案:
    1. 采用Azure Blob存储共享密钥(推荐)
      先安装NuGet包:Microsoft.AspNetCore.DataProtection.AzureStorage
      提前在Azure中创建存储账户与专用Blob容器,为App Service的托管身份授予该容器的读写权限后,在Startup.cs中添加如下配置:
    // 该配置需要放在AddAuthentication代码之前执行
    services.AddDataProtection()
        .SetDefaultKeyLifetime(TimeSpan.FromDays(180)) // 密钥有效期可按需调整
        .PersistKeysToAzureBlobStorage(
            Configuration["DataProtection:BlobConnStr"], 
            "你的Blob容器名称", 
            "dataprotection-keys.xml");
    // 若需更高安全级别,可额外配置用Azure Key Vault加密存储的密钥
    
    1. 若项目已接入Redis缓存,可直接用Redis存储共享密钥
      先安装NuGet包:Microsoft.AspNetCore.DataProtection.StackExchangeRedis
      添加如下配置:
    // 该配置需要放在AddAuthentication代码之前执行
    services.AddDataProtection()
        .PersistKeysToStackExchangeRedis(
            StackExchange.Redis.ConnectionMultiplexer.Connect(Configuration["RedisConnStr"]), 
            "DataProtection-Keys");
    
  • 第二步:配置参数托管
    将Blob连接字符串/Redis连接字符串配置到Azure App Service的应用程序配置项中,不要硬编码在代码里。
  • 第三步:重启验证
    配置完成后重启所有App Service实例即可生效。

内容的提问来源于stack exchange,提问作者agarwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:18:02