我正在使用内置的 ASP.NET 5 UserManager
类来实现网站上的重置密码功能。
在我的开发环境中一切正常。然而,一旦我尝试在作为 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));
然后,我这样生成令牌(将其发送到用户的电子邮件中,以便他们可以验证确实希望重置密码):
string token = UserManager.GeneratePasswordResetToken(user.Id);
很不幸,当在Azure上运行时,我遇到了上面的异常。
我在Google上搜索到了这个可能的解决方案。然而,它完全没有起作用,我仍然得到相同的异常。
根据该链接,这与会话令牌在像Azure这样的Web farm上无法工作有关。