如何在Identity Core中移除用户的双因素认证提供商
移除Identity Core中用户的双因素认证提供商
在.NET7 Identity Core里,GetValidTwoFactorProvidersAsync返回的有效双因素提供商列表,是根据用户已配置的认证方式对应的**用户令牌(UserToken)**或关联属性判断的。要移除指定提供商,需针对不同认证类型做对应操作:
1. 移除Authenticator认证方法
Authenticator的启用状态依赖用户是否存在AuthenticatorKey类型的令牌,彻底移除需两步:
- 重置Authenticator密钥(清除密钥内容)
- 删除对应的用户令牌记录
代码示例:
// 重置Authenticator密钥 await _userManager.ResetAuthenticatorKeyAsync(user); // 删除Authenticator对应的用户令牌 await _userManager.RemoveTokenAsync(user, "Authenticator", "AuthenticatorKey");
执行后,GetValidTwoFactorProvidersAsync将不再返回Authenticator。
2. 移除SMS认证方法
SMS认证的有效性关联用户的PhoneNumberConfirmed属性(需为true才会被判定为有效提供商),移除操作如下:
- 将
PhoneNumberConfirmed设为false - 可选:清除用户的
PhoneNumber属性(彻底清除手机号关联)
代码示例:
user.PhoneNumberConfirmed = false; // 可选:清除用户手机号 // user.PhoneNumber = null; await _userManager.UpdateAsync(user);
完成后,SMS会从有效提供商列表中消失。
3. 自定义/其他提供商的通用移除逻辑
对于自定义双因素提供商,大多也是基于用户令牌判断有效性,直接删除对应令牌即可:
// 替换为目标提供商的名称和令牌标识 await _userManager.RemoveTokenAsync(user, "目标提供商名称", "对应令牌名称");
验证移除结果
操作完成后,可调用以下代码确认目标提供商已移除:
var validProviders = await _userManager.GetValidTwoFactorProvidersAsync(user); // 检查列表中是否已无目标提供商
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

