2014-10-28 167 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位於白名單上時纔會返回令牌。