2014-10-28 159 views
0

在我的应用程序中,我有一个管理区域,可以创建用户并设置默认密码(创建帐户的用户不能看到该密码)。我通过使用usermanager来做到这一点。aspnet身份2 passwort重置令牌在其他子域无效

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在本地测试它,并将不同的端口分配给这些区域时,一切正常。 但是,一旦我将应用程序部署到服务器,当我尝试使用链接更改密码时,我总会得到“令牌无效”。

看起来主机是以某种方式编码的令牌,并尝试重置密码时变得非常有用。

是否有一个允许令牌由另一个服务器发出的设置,或者我该如何解决这个问题?

回答

0

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