Asp.net mvc 错误:无法解密反伪造令牌。在密钥环中找不到密钥{guid}

Asp.net mvc 错误:无法解密反伪造令牌。在密钥环中找不到密钥{guid},asp.net-mvc,asp.net-core,Asp.net Mvc,Asp.net Core,我们在一个有2台服务器的web服务器场上运行ASP.NET MVC Core 1.1应用程序,当用户尝试上载文件时,遇到这些异常。我们认为这是因为get请求来自一台服务器,而他们的post可能会发送到另一台web服务器,从而导致密钥不匹配 有没有办法绕过这个问题 错误1: 无法解密反伪造令牌 在Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgeryTokenSerializer.Deserialize(字符串 (说)在 Micro

我们在一个有2台服务器的web服务器场上运行ASP.NET MVC Core 1.1应用程序,当用户尝试上载文件时,遇到这些异常。我们认为这是因为get请求来自一台服务器,而他们的post可能会发送到另一台web服务器,从而导致密钥不匹配

有没有办法绕过这个问题

错误1: 无法解密反伪造令牌

在Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgeryTokenSerializer.Deserialize(字符串 (说)在 Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.DeserializeTokens(HttpContext httpContext,AntiforgeryTokenSet AntiforgeryTokenSet, AntiforgeryToken&cookieToken、AntiforgeryToken&requestToken)位于 Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.ValidateTokens(HttpContext httpContext,AntiforgeryTokenSet AntiforgeryTokenSet)位于 Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.d_u9.MoveNext() ---来自引发异常的上一个位置的堆栈结束跟踪---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()位于 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ValidateAntiforgeryTokenAuthorizationFilter.d_u3.MoveNext() ---来自引发异常的上一个位置的堆栈结束跟踪---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()位于 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d_u20.MoveNext() ---来自引发异常的上一个位置的堆栈结束跟踪---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()位于 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在Microsoft.AspNetCore.Builder.RouterMiddleware.d_u4.MoveNext()上 ---来自引发异常的上一个位置的堆栈结束跟踪---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()位于 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Microsoft.AspNetCore.HttpOverrides.httpmethodoverridemddleware.d_u4.MoveNext() ---上一个位置的堆栈结束跟踪,其中EXE

错误2:无法解密反伪造令牌

在 Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgeryTokenSerializer.Deserialize(字符串 (说)在 Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.DeserializeTokens(HttpContext httpContext,AntiforgeryTokenSet AntiforgeryTokenSet, AntiforgeryToken&cookieToken、AntiforgeryToken&requestToken)位于 Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.ValidateTokens(HttpContext httpContext,AntiforgeryTokenSet AntiforgeryTokenSet)位于 Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.d_u9.MoveNext() ---来自引发异常的上一个位置的堆栈结束跟踪---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()位于 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ValidateAntiforgeryTokenAuthorizationFilter.d_u3.MoveNext() ---来自引发异常的上一个位置的堆栈结束跟踪---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()位于 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d_u20.MoveNext() ---来自引发异常的上一个位置的堆栈结束跟踪---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()位于 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在Microsoft.AspNetCore.Builder.RouterMiddleware.d_u4.MoveNext()上 ---来自引发异常的上一个位置的堆栈结束跟踪---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()位于 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Microsoft.AspNetCore.HttpOverrides.httpmethodoverridemddleware.d_u4.MoveNext() ---上一个位置的堆栈结束跟踪,其中EXE


您是否定义了机器密钥(请参见此:)?两台服务器应具有相同的配置条目(可以在IIS中生成,也可以通过联机工具生成)


您是否定义了机器密钥(请参见此:)?两台服务器应具有相同的配置条目(可以在IIS中生成,也可以通过联机工具生成)


对于在IIS上运行的DotNetCore应用程序,如果应用程序池设置为使用AppPoolIdentity,则需要确保在应用程序池高级设置中将“加载用户配置文件”设置为“True”

见:

  • 如果用户配置文件可用,则密钥将保留到%LOCALAPPDATA%\ASP.NET\DataProtection密钥文件夹。如果操作系统 系统是Windows,密钥在静止时使用DPAPI加密

  • 对于在IIS上运行的DotNetCore应用程序,如果应用程序池设置为使用AppPoolIdentity,则需要确保在应用程序池高级设置中将“加载用户配置文件”设置为“True”

    见:

  • 如果用户配置文件可用,则密钥将保留到%LOCALAPPDATA%\ASP.NET\DataProtection密钥文件夹。如果操作系统 系统是Windows,密钥在静止时使用DPAPI加密
  • <machineKey  
      validationKey="GENERATED VALUE"           
      decryptionKey="GENERATED VALUE"
      validation="SHA1"
      decryption="AES" />