我们在具有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.E Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__20.MoveNext()中的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中的xceptionServices.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.DefaultAntiforgeryTokenSerializer.Deserialize(字符串serializedToken)在Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.DeserializeTokens(HttpContext的HttpContext的,AntiforgeryTokenSet antiforgeryTokenSet,AntiforgeryToken&cookieToken,AntiforgeryToken&requestToken)在Microsoft.AspNetCore.Antiforgery.Internal 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.E Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__20.MoveNext()中的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中的xceptionServices.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 回答
您是否定义了机器密钥(请参阅:Adding machineKey to web.config on web-farm sites)?两台服务器都应该有相同的machineKey配置条目(可以在IIS中或通过在线工具生成) .
对于在IIS上运行的DotNetCore应用程序,如果您的应用程序池设置为使用AppPoolIdentity,则需要确保在“应用程序池高级设置”中将“加载用户配置文件”设置为“True” .
见:https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/default-settings?view=aspnetcore-2.1