ASP.NET Core 标识 - 无效令牌 (Linux)
Posted
技术标签:
【中文标题】ASP.NET Core 标识 - 无效令牌 (Linux)【英文标题】:ASP.NET Core Identity - Invalid Token (Linux) 【发布时间】:2017-09-10 04:53:33 【问题描述】:我正在使用最新的 .NET Core (1.1) 和 EF Core 来构建我的 ASP.NET 网站,并且我还使用 ASP.NET Identity,并且我已经将我的网站发布到 Azure 主机并且一切正常那里(包括我的 Windows 本地主机)。但是,现在我正在使用 Apache 切换到我自己的 Linux(Centos 7)专用服务器,并且我的站点正常工作,但是在尝试重置密码或确认电子邮件时收到“无效令牌”消息。
我已经检查过类似这样的其他问题,解决方案是对通过电子邮件发送的 url 进行编码/解码,但是我已经这样做了,但它仍然无法正常工作。
我还尝试将整个数据库从 localhost 复制到我的服务器,以防 Linux 主机上出现迁移问题,但这也无济于事。所有迁移都已应用,其他不使用身份上下文的东西也可以使用。
经过额外搜索后,我发现主机上的不同机器密钥可能存在问题,并且安全标记不同步,但我不知道这对我有什么影响,因为我部署了一个全新版本的我的应用程序到服务器,在 localhost 上,一切都在 Azure 托管上运行。这也曾经是 ASP.NET MVC 的问题,而不是 Core。
我什至如何调试这个问题?我没有看到有人在使用新的 EF Core 时遇到过这个问题,尤其是在 Linux 主机上。
我使用最新的 VS 17 部署站点。我已按照 .NET Core 官方网站的指导设置了 Apache 代理:link
【问题讨论】:
【参考方案1】:默认情况下,Dotnet 核心 MVC 应用程序会将您的身份验证令牌加密保存在 cookie 中。
此数据加密/解密的种子/密钥基于您的机器密钥,每台机器都不同。
如果您运行应用程序的多个实例(负载平衡),当您的系统尝试解密在另一台计算机上创建的会话 cookie 时,将出现此消息/错误。
另一方面,如果您的浏览器中仍有 cookie 信息,并且您开始在不同的主机上托管网站,因为这个新主机将无法解密这些已经存在的会话 cookie。
我知道这是因为我遇到了同样的问题。您可以在这里找到会话的源代码:https://github.com/aspnet/Session/tree/dev/src/Microsoft.AspNetCore.Session
我在 dotnet core 尚未发布时尝试过这个,最终我使用了this blog。但现在可能已经很过时了。
我建议您建议您使用外部会话存储,而不是使用 cookie 作为数据存储。阅读他们关于如何设置的文档:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state
【讨论】:
以上是关于ASP.NET Core 标识 - 无效令牌 (Linux)的主要内容,如果未能解决你的问题,请参考以下文章
我们可以在 Asp.NET Core 中销毁/无效 JWT 令牌吗?
ASP.NET Core 2.2 - 密码重置在 Azure 上不起作用(无效令牌)