首页 文章

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

提问于
浏览
0

我们在具有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 回答

  • 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上运行的DotNetCore应用程序,如果您的应用程序池设置为使用AppPoolIdentity,则需要确保在“应用程序池高级设置”中将“加载用户配置文件”设置为“True” .

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

    如果用户配置文件可用,则密钥将持久保存到%LOCALAPPDATA%\ ASP.NET \ DataProtection-Keys文件夹 . 如果操作系统是Windows,则使用DPAPI对密钥进行静态加密 .

相关问题