Я реализую функциональность пароля reset на моем сайте, используя встроенный класс UserManager, который поставляется с ASP.NET 5.
Все работает отлично в моей среде dev. Однако, как только я попробую его на рабочем сайте, который работает как сайт Azure, я получаю следующее исключение:
System.Security.Cryptography.CryptographicException: The data protection operation was unsuccessful. This may have been caused by not having the user profile loaded for the current thread user context, which may be the case when the thread is impersonating.
Вот как я настраиваю экземпляр UserManager:
var provider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider(SiteConfig.SiteName);
UserManager.UserTokenProvider = new Microsoft.AspNet.Identity.Owin.DataProtectorTokenProvider<User>(provider.Create(ResetPasswordPurpose));
Затем я генерирую маркер таким образом (для отправки пользователю по электронной почте, чтобы они могли убедиться, что они действительно хотят reset их пароль):
string token = UserManager.GeneratePasswordResetToken(user.Id);
К сожалению, когда это работает на Azure, я получаю исключение выше.
Я искал Google и нашел это возможное решение. Однако это не сработало, и я все равно получаю то же исключение.
В соответствии со ссылкой, это что-то связано с токенами сеанса, которые не работают на веб-ферме, такой как Azure.