我一直在努力研究如何在我的身份服务器 4 应用程序中使用 Google 身份验证启用 2f 登录。
2fa 适用于电子邮件和电话。
如果我检查
var userFactors = await _userManager.GetValidTwoFactorProvidersAsync(user);
它有两个
email and phone
.我假设这将是为该用户设置的两个因素提供程序。现在,如果我检查
_usermanager
还有一个字段叫 tokenproviders
.其中似乎包含 default, email, phone, and authenticator
.我假设这些是 Asp .net 身份配置来处理的那些。我已经研究出如何创建为 authecator 应用程序创建 QR 码所需的 secret 。以及如何构建二维码和测试代码
var code = _userManager.GenerateNewAuthenticatorKey();
var qr = AuthencatorHelper.GetQrCodeGoogleUrl("bob", code, "My Company");
var user = await _signInManager.TwoFactorAuthenticatorSignInAsync(codeFromAppToTestWith, true, false);
if (user == null)
{
return View("Error");
}
现在的问题。我已经尝试了我可以在用户身上找到的所有方法,试图找出如何向用户添加另一个 token 提供程序。
如何为用户分配新的 token 提供程序并提供创建身份验证代码所需的密码?我什至没有在数据库设置中看到任何表来处理这些信息。电子邮件和电话号码在那里,并且有一个 2faenabled 列。但与身份验证器无关。
我目前正在研究创建一个自定义用户管理器并向应用程序用户添加一个字段。我真的希望有人有更好的主意。
最佳答案
据我所知,每次用户需要配置身份验证器应用程序时,您都会生成一个新的身份验证器 key :
var code = _userManager.GenerateNewAuthenticatorKey();
您应该知道使用
GenerateNewAuthenticatorCodeAsync
将 不是 保留 key ,因此对 2FA 没有用。相反,如果尚未创建 key ,则需要在底层存储中生成 key 并将其持久化:
var key = await _userManager.GetAuthenticatorKeyAsync(user); // get the key
if (string.IsNullOrEmpty(key))
{
// if no key exists, generate one and persist it
await _userManager.ResetAuthenticatorKeyAsync(user);
// get the key we just created
key = await _userManager.GetAuthenticatorKeyAsync(user);
}
如果尚未完成,它将生成 key 并将其保存在数据库(或为身份配置的任何存储)中。
如果不将 key 保存在存储中,
AuthenticatorTokenProvider
将永远无法生成 token ,并且在调用 GetValidTwoFactorProvidersAsync
时将不可用.
关于c# - 向用户添加 2fa 身份验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51305556/