2017-04-13 351 views
3

我正在使用最新的.NET Core(1.1)和EF Core来构建我的ASP.NET网站,并且我还使用ASP.NET身份,并且我已经发布我的网站到Azure主机,一切都按预期工作(包括我的Windows本地主机)。但是现在我正在使用Apache切换到我自己的Linux(Centos 7)专用服务器,并且我的网站正在运行,但是当尝试重置密码或确认电子邮件时,我收到“无效令牌”消息。ASP.NET核心身份 - 无效令牌(Linux)

我已经检查过这样的其他问题,解决方法是编码/解码通过电子邮件发送的url,但是我已经这样做了,但它仍然无法正常工作。

我也尝试将整个数据库从本地主机复制到我的服务器,以防Linux主机上发生迁移,但这也无济于事。所有迁移都已应用,其他不使用Identity上下文的东西也可以使用。

经过额外搜索后,我发现它可能是主机上不同机器密钥的问题,并且安全印记不同步,但我不明白这会如何影响我,因为我部署了一个全新的版本我的应用程序到服务器,并在本地主机上的一切工作以及Azure托管。此外,这曾经是ASP.NET MVC的问题,而不是核心。

我怎样才能调试这个问题?我还没有看到任何人在新的EF Core上出现这个问题,尤其是在Linux主机上。 link在默认

回答

0

DOTNET核心MVC应用程序保存在cookie加密您的身份验证令牌:

我使用作为指导官方.NET核心网站上的最新VS 17.我已经设置了Apache代理部署站点。

该数据加密/解密的种子/密钥是基于您的机器密钥的,这在每台机器上都是不同的。

如果您运行了应用程序的多个实例(负载均衡),则当系统尝试解密在另一台计算机上创建的会话cookie时,将发生此消息/错误。

另一方面,如果您的浏览器中仍有Cookie信息,并且您开始在不同主机上托管网站,则此新主机将无法解密这些已存在的会话Cookie。

我知道这一点,因为我有同样的问题。你可以在这里找到会话的源代码:https://github.com/aspnet/Session/tree/dev/src/Microsoft.AspNetCore.Session

我试过这个时,dotnet核心还没有发布,我最终使用this blog。但现在可能已经过时了。

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