После входа в систему с использованием двухфакторного приложения аутентификации я установил для TrueClient значение true следующим образом:
await _signInManager.TwoFactorAuthenticatorSignInAsync(code: request.Code,
isPersistent: request.IsPersistent,
rememberClient: request.RememberClient);
Вход в систему работает нормально, и я получаю файлы cookie .AspNetCore.Identity.Application
и Identity.TwoFactorRememberMe
. Если я выйду и снова войду, мне не нужно использовать двухфакторный. Пока все в порядке.
Проблема в том, что когда я делаю какие-то изменения в пользователе, например, номер телефона, и изменяется SecurityStamp. После внесения изменений я использую await _signInManager.RefreshSignInAsync(user)
. Но Identity.TwoFactorRememberMe
cook ie не обновляется. Это приводит к двум проблемам:
- При следующем входе в систему мне придется снова использовать двухфакторную аутентификацию.
- Если во время того же сеанса я проверю, есть ли у пользователя запомнил браузер, используя
await _signInManager.IsTwoFactorClientRememberedAsync(user)
, это приведет к ошибке «Не удалось проверить штамп безопасности» и .AspNetCore.Identity.Application
будет удалено.
Я пытался обновить Identity.TwoFactorRememberMe
cook ie одновременно с .AspNetCore.Identity.Application
cook ie, вот так:
await base.RefreshSignInAsync(user);
await RememberTwoFactorClientAsync(user);
Работает, но также установит Identity.TwoFactorRememberMe
cook ie для тех, кто не было этого раньше. Я не могу проверить, установлен ли он раньше, потому что тогда я получаю ошибку, которую я описал в (2) выше.
Следующее, что я попытаюсь сделать, - это делать что-то подобное для каждого места, где я делаю что-то, что изменяет пользователя SecurityStamp:
var isTwoFactorClientRemembered = await _signInManager.IsTwoFactorClientRememberedAsync(user);
// do the changes...
await _signInManager.RefreshSignInAsync(user);
if (isTwoFactorClientRememberedAsync)
await _signInManager.RememberTwoFactorClientAsync(user);
Есть ли что-то, чего мне здесь не хватает, или это единственный способ go?
Я использую IdentityServer4 и приложение SPA, но я не верю, что это как-то связано с этой проблемой.