我正在使用ASP.NET身份驗證MVC5中的成員身份,並且有一個供admin用戶管理用戶和角色的頁面。我試圖讓管理員更改任何其他用戶的密碼,如果他需要這樣做。我使用這個代碼來執行任務:UserManager.AddPassword不能按預期工作
userManager.RemovePassword(userId);
userManager.AddPassword(userId, newPassword);
似乎很簡單,但是當我試圖用我剛剛創建,我不能將新密碼登錄;我收到無效的密碼信息。
我試圖通過試圖找出如何散列密碼,進一步研究這個問題,並發現了這一點:
string hashed = userManager.PasswordHasher.HashPassword("some password");
首先,我假設這個密碼散列器就是AddPassword()
內部使用。其次,我注意到每次運行HashPassword('some password')
時,都會得到一個完全不同的散列給我。
我不明白這一點...
HashPassword使用salt值來隨機化散列,這就是爲什麼每次使用所有HashPassword時都會得到不同的值。鹽值使得攻擊者無法使用字典攻擊,只要他們能夠查看哈希密碼來找出未經哈希的版本。 驗證密碼時再次使用此salt值。 – 2014-10-08 04:26:21
@ErikFunkenbusch好吧,夠用了,但是我不能用我傳遞給'AddPassword()'的密碼登錄? – Matt 2014-10-08 12:07:26