我正在使用最新的.NET Core(1.1)和EF Core来构建我的 ASP.NET 网站,我也使用 ASP.NET Identity,并且我已经将我的网站发布到Azure主机,并且那里的一切都按预期工作(包括我的Windows本地主机)。但是现在我正在使用Apache切换到我自己的Linux(Centos 7)专用服务器,并且我使该站点正常工作,但是在尝试重置密码或确认电子邮件时收到"无效令牌"消息。
我已经检查了其他类似的问题,解决方案是编码/解码通过电子邮件发送的 url,但是我已经这样做了,但它仍然不起作用。
我还尝试将整个数据库从本地主机复制到我的服务器,以防 Linux 主机上的迁移出现问题,但这也没有帮助。应用所有迁移,不使用标识上下文的其他内容也有效。
经过其他搜索,我发现主机上的不同机器密钥可能有问题,并且安全标记不同步,但我看不出这会如何影响我,因为我将我的应用程序的全新版本部署到服务器,并且在本地主机上一切在 Azure 主机上都可以正常工作。这也曾经是 ASP.NET MVC的问题,而不是Core的问题。
我什至如何调试此问题?我还没有看到任何人在新的EF Core上遇到此问题,尤其是在Linux主机上。
我使用最新的VS 17部署站点。我已经按照官方.NET Core网站上的指导设置了Apache代理:链接
默认情况下,Dotnet 核心 MVC 应用程序会将加密的身份验证令牌保存在 Cookie 中。
此数据加密/解密的种子/密钥基于您的计算机密钥,该密钥在每台计算机上都不同。
如果您运行了应用的多个实例(负载平衡),则当您的系统尝试解密在其他计算机上创建的会话 cookie 时,将发生此消息/错误。
另一方面,如果您的浏览器中仍有 cookie 信息,并且您开始将网站托管在不同的主机上,则此新主机将无法解密这些已经存在的会话 cookie。
我知道这一点,因为我有同样的问题。您可以在此处找到会话的源代码:https://github.com/aspnet/Session/tree/dev/src/Microsoft.AspNetCore.Session
当dotnet核心尚未发布时,我尝试了这个,我最终使用了这个博客。但可能现在已经过时了。
我建议您使用外部会话存储,而不是使用 cookie 作为数据存储。 通读他们的文档,了解如何设置它: https://learn.microsoft.com/en-us/aspnet/core/fundamentals/app-state