Отменить токен, созданный UserTokenProvider в ASP.NET Identity 2.0

Есть ли способ отменить, например, токен конформации электронной почты, сгенерированный usermanager в ASP NET Identity 2.0?

Контекст
Я хотел бы дать пользователю возможность отправить подтверждение по электронной почте. Для этого я создаю новый токен с помощью UserManager.GenerateEmailConfirmationTokenAsync(user.Id) и отправлю электронное письмо с новым сгенерированным токеном. К сожалению, когда я делаю это, ранее созданные токены все еще работают, есть ли способ их отменить?

Пример кода
В классе UserManager:

manager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(options.DataProtectionProvider.Create("ASP.NET Identity"));

В AccountController:

var user = await UserManager.FindByEmailAsync("email");

// All generated tokens below will work to confirm the email. 
// I only want the last token to be valid when confirming the email address.
var token1 = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var token2 = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var token3 = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var token4 = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var token5 = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);

var result = await UserManager.ConfirmEmailAsync(user.Id, token5);

Информация о месте хранения сгенерированного токена и способах создания этих токенов также приветствуется!

Буду признателен, если вы пришлете мне эту информацию.

Ответы

Ответ 1

Пользователь UserTokenProvider по умолчанию генерирует токены на основе пользователей SecurityStamp, поэтому до тех пор, пока изменения (например, когда пароль пользователя не изменится), токены всегда будут одинаковыми и останутся действительными. Поэтому, если вы хотите просто аннулировать старые токены, просто вызовите manager.UpdateSecurityStampAsync().