ASP.NET核心标识 - 无效令牌(Linux)

时间:2017-04-13 22:53:23

标签: asp.net linux entity-framework asp.net-identity .net-core

我使用最新的.NET Core(1.1)和EF Core构建我的ASP.NET网站,我也使用ASP.NET Identity,我已经将我的网站发布到Azure主机,一切正常正如预期的那样(包括我的Windows localhost)。但是现在我正在切换到我自己的Linux(Centos 7)专用服务器和Apache,我有网站工作,但我得到了#34;无效令牌"尝试重置密码或确认电子邮件时的消息。

我已经检查过这样的其他问题,解决方法是编码/解码通过电子邮件发送的网址,不过我已经这样做但是它还没有工作。

我还尝试将整个数据库从localhost复制到我的服务器,以防Linux主机上出现迁移,但这也无济于事。所有迁移都已应用,其他不使用身份上下文的内容也可以使用。

经过额外搜索后,我发现主机上的不同机器密钥可能存在问题,并且安全标记不同步,但我不知道这对我有什么影响,因为我部署了一个全新的我的应用程序版本到服务器,在localhost上一切都可以在Azure托管上运行。这曾经是ASP.NET MVC的问题,而不是Core。

我怎样才能调试此问题?我没有看到任何人在使用新的EF Core时遇到此问题,特别是在Linux主机上没有。

我使用最新的VS 17部署该站点。我已在官方.NET Core网站上指导设置Apache代理:link

1 个答案:

答案 0 :(得分:0)

默认情况下,Dotnet核心MVC应用程序会保存您在cookie中加密的身份验证令牌。

此加密/解密数据的种子/密钥取决于您的计算机密钥,每台计算机上的密钥都不同。

如果您运行了多个应用实例(负载均衡),当您的系统尝试解密在另一台计算机上创建的会话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