aspnet identity 2 passwort reset token在其他子域上无效

时间:2014-10-28 21:54:45

标签: asp.net-identity-2 forgot-password

在我的应用程序中,我有一个管理区域,可以在其中创建用户并设置默认密码(创建帐户的用户不能看到密码)。我这样做是通过使用usermanager。

var usermanager = context.GetOwinContext().GetUserManager<ApplicationUserManager>();
usermanager.Create(user, pass);

如果创建了用户,则会创建密码重置令牌并通过电子邮件发送给用户。

string code = usermanager.GeneratePasswordResetToken(user.Id);
var url = string.Format("<a href='{0}?code={1}'>hier</a>", callBackUrl, HttpUtility.UrlEncode(code));
mail = CreateStudentEmailContent(context, repo, student, url, user.UserName);
usermanager.SendEmail(user.Id, mail.Subject, mail.Body);

现在,用户收到邮件并点击链接,该链接将他发送到可以设置新密码的公共区域中的密码忘记页面。

管理区域和公共区域是两个单独的项目,它们将托管在不同子域下的不同服务器上。当我使用localhost在本地测试它并将不同的端口分配给这些区域时,一切正常。 但是,一旦我将应用程序部署到服务器,我总会得到一个&#34;令牌无效&#34;当我尝试使用链接更改密码时。

似乎主机以某种方式编码在令牌中,并在尝试重置密码时进行了验证。

是否有允许令牌由其他服务器发出的设置或如何解决此问题?

1 个答案:

答案 0 :(得分:0)

不幸的是我发现没有办法从其他服务器允许令牌。 但是,我通过从公共服务器请求令牌解决了这个问题。由于服务器可以访问相同的aspnetusers表,因此可以正常工作。然后,我使用公共服务器创建的令牌从内部服务器发送邮件。 作为安全措施,公共服务器上的请求检查发送方的IP,并且只有在IP列入白名单时才返回令牌。