【问题标题】:Integrating DUO WEB with .NET core将 DUO WEB 与 .NET 核心集成
【发布时间】:2020-08-10 11:32:30
【问题描述】:

我在我的 .NET 核心应用程序框架 2.2 上使用 Google Authenticator for 2FA。

它工作得很好。现在,我想用 Duo 替换它。我在应用程序中集成了 DUO,但在身份框架中与 DUO 的集成不起作用。需要帮助,因为我不知道如何使它工作。

所以,我的登录帐户启用了两个因素,它首先在我提供凭据时让我登录,然后它要求输入 2FA 代码(就像以前使用 Google Authenticator 一样),我已经用 DUO 页面替换了该代码页它现在要求我发送 PUSH,我按下它,它就会向我发送推送,并且那个位工作正常。

这是发送推送的代码,这部分工作正常。

         if (result.RequiresTwoFactor)
         {
          var sign = Duo.Web.SignRequest(ikey, skey, akey, username);
          ViewBag.sig_request = sign;
          return View("DuoLogin");
         }

尝试了以下两因素身份验证,结果失败。

 string authenticated_username = Duo.Web.VerifyResponse(ikey, skey, akey, sig_response);

  if (authenticated_username == username)
  {
   ViewBag.Message = "authenticated Successfully";
  
 var result = await _signInManager.TwoFactorAuthenticatorSignInAsync(authenticated_username., rememberMe, Input.RememberMachine);

 //OR 
var result = _signInManager.TwoFactorAuthenticatorSignInAsync(authenticated_username, true, false);

//OR
var result = _signInManager.TwoFactorSignInAsync("Duo", sig_response, true, false);
}

authenticate_username 只带回 DUO 的用户名,没有代码可以传递给“TwoFactorSignInAsync”方法。

更新:

因此,如果您使用 DUO 扫描 QR 码,您可以使用 DUO 代替 Google 身份验证器,它可以正常工作。但我仍然希望在启用 DUO 的情况下进行推送身份验证。

【问题讨论】:

    标签: c# asp.net-core .net-core asp.net-core-2.1 two-factor-authentication


    【解决方案1】:

    我通过创建一个新的 LoginWithDuo 剃须刀页面解决了这个问题。该视图将 Duo html 和 javascript 保存在他们的网站上。 post_action 设置为“LoginWithDuo”。 在下面的代码中,_duoService 只是处理 Duo.Web.xxxxx 方法调用并从设置中获取密钥。在 Login.cshtml.cs 中,我在 Post 操作中的 result.RequiresTwoFactor 块中将 ./LoginWIth2fa 替换为 ./LoginWithDuo。

    public async Task<IActionResult> OnPostAsync(string sig_response, bool rememberMe, string returnUrl = null)
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }
    
            returnUrl = returnUrl ?? Url.Content("~/");
    
            var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();
            if (user == null)
            {
                throw new InvalidOperationException($"Unable to load two-factor authentication user.");
            }
    
            string authenticatedUsername = _duoService.Verify(sig_response);
    
            if(authenticatedUsername == "username of logging in user")
            {
                // Cleanup two factor user id cookie 
                await _signInManager.SignOutAsync();
    
                await _signInManager.SignInAsync(user, isPersistent, "Duo");
                return LocalRedirect(returnUrl);
            }
            else
            {
                _logger.LogWarning("Invalid authenticator code entered for user with ID '{UserId}'.", user.Id);
                ModelState.AddModelError(string.Empty, "Invalid Duo match.");
                return Page();
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 2020-03-22
      相关资源
      最近更新 更多