我们有一个 ASP.NET 核心应用程序,它具有默认的身份验证系统,托管在Azure上。 最近,我们创建了一个新的应用服务,并将用户路由到该服务,同时保持与同一数据库的连接。
但是,当用户使用新服务器时,我们会收到持续崩溃并显示以下错误:
在密钥环中找不到密钥 {xxx-xxx-xxx-xxx}。
类型
System.Security.Cryptography.CryptographicException
和方法
Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgeryTokenSerializer.Deserialize(String 序列化令牌(
我们的理解是服务器正在尝试解密令牌,但由于它是从其他服务器接收的,因此我们的服务器只是崩溃。
如果您能提出一种暂时解决此问题的方法,直到我们更改数据保护提供商,我们将不胜感激。
我们想要一种不会让我们的服务器崩溃的方法。
非常感谢
更新:我现在很惊讶此错误发生在:POST 帐户/登录和 POST 帐户/注册 虽然这些方法不需要授权,但这些方法装饰有:
[验证防伪令牌]
获取帐户/登录和发布帐户/登录都发生在同一台服务器上。
确保在整个服务器场中具有相同的计算机密钥。您应该在应用程序级别设置它,这意味着不同的应用程序具有不同的密钥,但同一应用程序在服务器场的所有服务器上具有相同的密钥。
机器mey负责加密引擎选定功能的一些内部结构,包括防伪令牌。不同服务器上的不同密钥会导致您描述的确切问题。
https://blogs.msdn.microsoft.com/amb/2012/07/31/easiest-way-to-generate-machinekey/
https://msdn.microsoft.com/en-US/library/W8H3skW9(v=vs.100(.aspx
就我而言。 当我为身份服务器使用两个或多个实例时,发生了此错误。
所以 登录正常,但检查令牌会导致错误。 由于登录是由一个实例完成的,并且检查是使用其他实例完成的。
解决此问题的最简单方法是确保您的身份服务器或 API 仅使用一个实例。