ASP.NET Core Identity:在不同应用程序中生成和确认电子邮件时出现“无效令牌”

问题描述 投票:0回答:1

我正在开发一个使用 ASP.NET Core Identity 的项目,该项目涉及两个独立的应用程序:一个 API 和一个 MVC 应用程序。

我的场景如下:我使用 API 中的

UserManager.GenerateEmailConfirmationTokenAsync
生成电子邮件确认令牌。

然后,我尝试通过调用

_userManager.ChangeEmailAsync
来确认 MVC 应用程序中的电子邮件。但是,这会导致“无效令牌”错误。

如果令牌是在同一个应用程序中生成和确认的,无论是在 API 还是 MVC 应用程序中,一切都可以正常工作。仅当令牌在一个应用程序中生成并在另一个应用程序中使用时才会出现此问题。

两个应用程序共享相同的 ASP.NET Core Identity 配置,包括令牌生成算法和密钥,并且库版本是同步的。

为什么在一个应用程序中创建的令牌在另一个应用程序中被视为无效,如何解决这种情况?任何建议或解决方案将不胜感激。

asp.net-core-mvc asp.net-core-webapi .net-8.0 asp.net-core-identity
1个回答
0
投票

这是例外,生成的令牌是基于用户SecurityStamp和主机服务器IP地址等。

您可以查看以下源代码:

如何验证令牌:

https://github.com/dotnet/aspnetcore/blob/main/src/Identity/Extensions.Core/src/TotpSecurityStampBasedTokenProvider.cs#L59

如何获得SecurityStamp:

https://github.com/dotnet/aspnetcore/blob/091e35e3ae113e79b8d973ebdcd96404ba4f9758/src/Identity/Extensions.Core/src/UserManager.cs#L819

此 ScurityStamp 通常存储在每个用户的数据库中,您需要确保首先拥有相同的数据库。

然后根据这个源代码,你可以发现在生成和验证令牌时,它还会检查主机IP地址。我建议您可以确保这两个应用程序位于同一主机内,并使用相同的安全配置(例如数据保护密钥)。

© www.soinside.com 2019 - 2024. All rights reserved.