目前对这个问题的最高投票表明:
另一个不是安全问题的安全问题虽然与安全相关,但却是完整的,并且很难解决散列密码和加密密码之间的区别.最常见于代码中的程序员试图提供不安全的"提醒我密码"功能.
究竟是什么区别?我总是认为哈希是一种加密形式.海报所指的不安全功能是什么?
我正在使用UserManagerASP.NET 5附带的内置类在我的站点上实现重置密码功能.
在我的开发环境中一切正常.但是,一旦我在作为Azure网站运行的生产站点中尝试它,我会得到以下异常:
System.Security.Cryptography.CryptographicException:数据保护操作失败.这可能是由于没有为当前线程的用户上下文加载用户配置文件引起的,这可能是线程模拟时的情况.
这是我设置UserManager实例的方式:
var provider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider(SiteConfig.SiteName);
UserManager.UserTokenProvider = new Microsoft.AspNet.Identity.Owin.DataProtectorTokenProvider<User>(provider.Create(ResetPasswordPurpose));
Run Code Online (Sandbox Code Playgroud)
然后,我生成令牌(通过电子邮件发送给用户,以便他们可以验证他们确实想要重置密码):
string token = UserManager.GeneratePasswordResetToken(user.Id);
Run Code Online (Sandbox Code Playgroud)
不幸的是,当它在Azure上运行时,我得到了上面的例外.
我用Google搜索并发现了这种可能的解决方案.但是,它根本不起作用,我仍然得到同样的例外.
根据该链接,它与会话令牌有关,这些会话令牌不在像Azure这样的Web场上工作.