错误无法解密防伪令牌。密钥环中找不到密钥{guid}

问题描述 投票:0回答:2

我们在具有2台服务器的Web场上运行ASP.NET MVC Core 1.1应用程序,并在用户尝试上载文件时遇到这些异常。我们认为这种情况正在发生,因为get请求来自一个服务器,他们的帖子可能会转到另一个Web服务器,导致密钥不匹配?

有办法解决这个问题吗?

错误1:无法解密防伪令牌。

在Microsoft.AspNetCore.Antiforgery.Internal的Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgeryTokenSerializer.Deserialize(String serializedToken)at Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.DeserializeTokens(HttpContext httpContext,AntiforgeryTokenSet antiforgeryTokenSet,AntiforgeryToken&cookieToken,AntiforgeryToken&requestToken)。 Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.d__9.MoveNext()中的DefaultAntiforgery.ValidateTokens(HttpContext httpContext,AntiforgeryTokenSet antiforgeryTokenSet)---从抛出异常的上一个位置的堆栈跟踪结束---在System.Runtime.ExceptionServices上。 Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ValidateAntiforgeryTokenAuthorizationFilter.d__3.MoveNext()中的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中的ExceptionDispatchInfo.Throw()---来自先前位置的堆栈跟踪结束,其中异常是抛出---在System.Runtime.Exc Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__20.MoveNext()中的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中的eptionServices.ExceptionDispatchInfo.Throw()---来自先前位置的堆栈跟踪结束,其中异常是抛出---在Microsoft.AspNetCore.Builder.RouterMiddleware.d__4.MoveNext()的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)上的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()---栈尾从抛出异常的先前位置追踪---在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务),位于Microsoft.AspNetCore.HttpOverrides.HttpMethodOverrideMiddleware.d__4.MoveNext( )---从前一个位置的堆栈跟踪结束

错误2:无法解密防伪令牌。

在Microsoft.AspNetCore.Antiforgery.Internal的Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgeryTokenSerializer.Deserialize(String serializedToken)at Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.DeserializeTokens(HttpContext httpContext,AntiforgeryTokenSet antiforgeryTokenSet,AntiforgeryToken&cookieToken,AntiforgeryToken&requestToken)。 Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.d__9.MoveNext()中的DefaultAntiforgery.ValidateTokens(HttpContext httpContext,AntiforgeryTokenSet antiforgeryTokenSet)---从抛出异常的上一个位置的堆栈跟踪结束---在System.Runtime.ExceptionServices上。 Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ValidateAntiforgeryTokenAuthorizationFilter.d__3.MoveNext()中的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中的ExceptionDispatchInfo.Throw()---来自先前位置的堆栈跟踪结束,其中异常是抛出---在System.Runtime.Exc Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__20.MoveNext()中的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中的eptionServices.ExceptionDispatchInfo.Throw()---来自先前位置的堆栈跟踪结束,其中异常是抛出---在Microsoft.AspNetCore.Builder.RouterMiddleware.d__4.MoveNext()的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)上的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()---栈尾从抛出异常的先前位置追踪---在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务),位于Microsoft.AspNetCore.HttpOverrides.HttpMethodOverrideMiddleware.d__4.MoveNext( )---从前一个位置的堆栈跟踪结束

asp.net-mvc asp.net-core
2个回答
1
投票

您是否定义了机器密钥(请参阅:Adding machineKey to web.config on web-farm sites)?两台服务器都应具有相同的machineKey配置条目(可以在IIS中或通过在线工具生成)。

<machineKey  
  validationKey="GENERATED VALUE"           
  decryptionKey="GENERATED VALUE"
  validation="SHA1"
  decryption="AES" />

0
投票

对于在IIS上运行的DotNet Core Apps,如果您的应用程序池设置为使用App Pool Identity,则需要确保在“应用程序池高级设置”中将“加载用户配置文件”设置为“True”。

见:https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/default-settings?view=aspnetcore-2.1

  1. 如果用户配置文件可用,则密钥将持久保存到%LOCALAPPDATA%\ ASP.NET \ DataProtection-Keys文件夹。如果操作系统是Windows,则使用DPAPI对密钥进行静态加密。
© www.soinside.com 2019 - 2024. All rights reserved.