我有两个Asp.Net Core 2.1应用程序。
firstdomain.com]上的一个站点应该能够为同一域上的用户创建/注册/管理帐户,以及在seconddomain.com]上的站点上创建/注册/管理用户帐户>。从firstdomain.com创建/注册用户成为firstdomain.com
的用户]通过-]可以正常工作- 在firstdomain.com上从控制器发送电子邮件,包括令牌-
string token = await userManager.GenerateEmailConfirmationTokenAsync(user);
- 用户收到一封带有按钮的电子邮件,该按钮链接到firstdomain.com上的ConfirmEmail页面,通过-验证令牌。
var user = await userManager.FindByIdAsync(userId);
var result = await userManager.ConfirmEmailAsync(user, HttpUtility.UrlDecode(token));
确认用户电子邮件,他们设置密码并登录到该站点。在firstdomain.com
。
但是...通过firstdomain.com创建/注册用户以成为seconddomain.com上的用户的方法如下:->- 在firstdomain.com
上从控制器发送电子邮件,包括令牌-
string token = await userManager.GenerateEmailConfirmationTokenAsync(user);
- 用户收到带有按钮的电子邮件,该按钮链接到seconddomain.com上的ConfirmEmail页面,其中令牌实际上通过-被标记为无效。
var user = await userManager.FindByIdAsync(userId);
var result = await userManager.ConfirmEmailAsync(user, HttpUtility.UrlDecode(token));
从firstdomain.com
创建/注册用户成为
seconddomain.com上的用户不起作用,并且日志显示-VerifyUserTokenAsync()失败,目的是:用户XXXXXXXX-XXXX的EmailConfirmation -XXXX-XXXX-XXXXXXXXXXXX
两个应用程序都在同一服务器上运行。
我有两个Asp.Net Core 2.1应用程序。 firstdomain.com上的一个站点应该能够为同一域上的用户创建/注册/管理帐户,以及创建/注册/管理用户...
您是否希望您的用户自动访问这两个站点?
令牌验证的默认实现使用每个用户的随机值,该值将存储在数据库中。您的两个应用程序都将用户信息存储在同一数据库中吗?
如果不想让两个应用程序都完全访问同一数据库,则可以实施一项替代IUserSecurityStampStore
服务,以跟踪两个站点的这些随机用户机密。或通过散列两个站点已经知道的其他秘密值以确定性方式派生用户“秘密”,但是这还需要考虑其他安全隐患。
您还可以替换IUserTwoFactorTokenProvider
服务,以完全控制令牌的产生方式,以确保两个站点都可以生成和验证这些令牌。
或使用OAuth路由,并从firstdomain生成某种形式的承载令牌,第二域可以验证。