ASP.NET Core身份验证 - 无效的令牌(Linux)

3
我正在使用最新的.NET Core(1.1)和EF Core来构建我的ASP.NET网站,我还使用了ASP.NET Identity,并已经将我的网站发布到Azure主机上,一切都按预期工作(包括我的Windows本地主机)。然而,现在我要切换到自己的Linux(Centos 7)专用服务器,使用Apache,我已经让网站运行了,但是当我尝试重置密码或确认电子邮件时,会出现“无效令牌”消息。
我已经检查了其他类似的问题,解决方案是对通过电子邮件发送的URL进行编码/解码,但我已经这样做了,但仍然不起作用。
我还尝试将整个数据库从本地主机复制到我的服务器上,以防Linux主机上的迁移存在问题,但这也没有帮助。所有迁移都被应用,而其他不使用Identity上下文的东西也有效。
在进一步搜索后,我发现可能是主机上的不同机器密钥造成的问题,安全标记未同步,但我不明白为什么会影响我,因为我将一个全新版本的应用程序部署到服务器上,在本地主机和Azure托管上一切都正常。此外,这曾经是ASP.NET MVC的问题,而不是Core的问题。
我该如何调试这个问题?我没有看到任何人在新的EF Core上遇到这个问题,尤其是在Linux主机上。
我使用最新的VS 17部署网站。我按照官方.NET Core网站上的指导设置了Apache代理:链接
1个回答

0

Dotnet core MVC 应用程序默认将您的身份验证令牌加密保存在 cookie 中。

此加密/解密数据的种子/密钥基于您的机器密钥,每台机器都不同。

如果您运行多个应用程序实例(负载平衡),当系统尝试解密在其他计算机上创建的会话 cookie 时,将出现此消息/错误。

另一方面,如果您仍然在浏览器中保留 cookie 信息,并开始在不同的主机上托管网站,那么这个新主机当然无法解密这些已经存在的会话 cookie。

我知道这是因为我曾经遇到过同样的问题。您可以在此处找到会话源代码:https://github.com/aspnet/Session/tree/dev/src/Microsoft.AspNetCore.Session

当 dotnet core 还未发布时,我尝试过使用 this blog。但现在可能已经非常过时了。

我建议您使用外部会话存储而不是使用cookie作为数据存储。请阅读他们的文档,了解如何设置:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/app-state

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接