我们正在运行一个Azure应用程序服务(linux),用于身份验证和授权。它使用 Microsoft Identity 来使用 Azure AD 身份验证,因此我们使用 Azure ad oidc。几个月前,我们没有遇到任何问题,但是当我们添加前门并将应用程序服务扩展到 3 个实例时,这种情况开始发生“无法取消保护消息。状态”。
我们一登陆页面就会出现此错误,因为当您打开它时,它会将您重定向到天蓝色广告进行登录。奇怪的是,当您刷新页面一两次时,它会通过并为您签名没有错误。
使用 Redis 作为密钥存储。
使用数据保护后有人遇到过这样的问题吗?
我们遵循这里的答案https://github.com/AzureAD/microsoft-identity-web/wiki/Deploying-Web-apps-to-App-services-as-Linux-containers#issue-with-scaled-外网应用程序内应用程序服务, 并尝试了数据保护:使用azure keyvault和不使用azure blob存储,尝试将密钥存储在我们的数据库中,最后尝试了redis,但这些解决方案都不起作用。会话关联性也已开启。
当您有多个客户端实例时,必须确保将数据保护 API 配置为在所有实例中使用相同的共享加密密钥。否则状态参数无法解密。
我最近在博客中介绍了状态参数及其加密方式:
揭秘 ASP.NET Core 中 OpenID Connect 的状态和 Nonce 参数
请参阅这篇关于配置数据保护 API 的文章: