使用身份服务器 4 的两因素身份验证

Sat*_*jit 5 identityserver4

如何使用 Identity Server 4 实现两因素身份验证?令牌端点返回一个带有用户名和密码/客户端凭据的令牌。我们可以自定义这些端点吗?

根据示例的两种方法都不允许自定义端点:

>     var tokenClient = new TokenClient(disco.TokenEndpoint, "ro.client", "secret");
>     var tokenResponse = await tokenClient.RequestResourceOwnerPasswordAsync("brockallen@gmail.com",
> "Pass123$", "api1");
Run Code Online (Sandbox Code Playgroud)

是否可以使用 asp.net 身份或 EF Core 实现来实现 2 因素身份验证?

小智 6

这根本不应该是问题。当用户被重定向到身份服务器进行登录时,如果启用了 2FA,那么他/她必须在身份服务器返回响应之前输入身份验证器的代码。我创建了一个存储库和博客文章系列 ,详细解释了相关概念。在IdentityServer的AccountController中,您必须检查是否启用了 2FA 并在返回响应之前通过提供身份验证器代码要求用户继续。

var signInResult = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, true,
    lockoutOnFailure: false);

if (signInResult.RequiresTwoFactor)
{
    result.Status = Status.Success;
    result.Message = "Enter the code generated by your authenticator app";
    result.Data = new {requires2FA = true};
    return result;
}

Run Code Online (Sandbox Code Playgroud)

您还需要一个支持所有 2FA 任务的TwoFactorAuthenticationController (启用/禁用 2FA、使用验证码/恢复令牌登录、重置验证器等...)