Asp.NET - 身份 2 - 无效令牌错误 - Php

Asp.NET - Identity 2 - Invalid Token Error - Php

我正在使用 Asp.Net-Identity-2 并且我开发了验证电子邮件流程。

在我的本地环境中一切都运行良好,但是一旦我将代码部署到我的服务器并在我的服务器上测试相同的场景(在我的本地环境中运行),它就会显示 "Invalid Token"。

场景

我已经检查了这个 question 中所有可能的错误,我一切都正确,这就是我在本地完美运行的原因。必须与服务器有关。我认为服务器的日期可能会影响,但我将我的数据库服务器和我的 Web 服务器的日期同步,但它仍然失败。

我正在使用 GenerateEmailConfirmationTokenAsync 生成令牌并使用 ConfirmEmailAsync 确认令牌。我真的在执行这个方法,因为我为此写了日志,所以我可以确定(当你不知道发生了什么时,你必须确定一切正确吗?)

我已经 encode/decode url 所以令牌不会被破坏。我确信这一点,因为我将日志和 运行 代码放在服务器中并检查了几次。

用户在数据库中有安全标记,所以不是

令牌寿命为 8 天。所以不是那样。

我什至在 UserValidator 中尝试了 AllowOnlyAlphanumericUserNames 属性 = false 甚至 UniqueEmail = false

userManager.UserValidator = new UserValidator<User>(userManager) { AllowOnlyAlphanumericUserNames = false, UniqueEmail = false };

生成令牌的代码

ApplicationUserManager.GenerateEmailConfirmationTokenAsync(userId);

确认令牌的代码

ApplicationUserManager.ConfirmEmailAsync(subject, token);

有什么想法吗?

更新

它正在与所有客户端一起在 server/local 上工作,但不与 Php 客户端一起工作,并且 Php 客户端正在做额外的工作,这正在更改安全标记,因此出现了问题.

由于服务器上唯一的客户端在 Php,我认为服务器有问题,而不是我的本地环境。在我的本地安装整个环境(使用 php 客户端)并调试后,我发现了问题。请阅读下面的答案。

嗯,错误是由令牌生成后正在执行的代码引起的。此代码正在更改数据库中用户的 SecurityStamp。

由于 Asp.Net Identity 2 使用 Security Stamp 来生成和验证令牌,并且在令牌生成后更改,因此令牌始终无效。

谢谢!