1

返回正確SignInStatus根據MSDN無法配置UserCookie爲雙因素身份驗證

無論是本地登錄和社交日誌中檢查,看是否被啓用2FA。如果啓用2FA,SignInManager登錄方法將返回SignInStatus.RequiresVerification,並且用戶將被重定向到SendCode操作方法,在那裏他們必須輸入代碼才能完成登錄順序。 如果用戶在用戶本地Cookie上設置了RememberMe,SignInManager將返回SignInStatus.Success,並且他們不必經過2FA。

我不希望用戶能夠使用應用程序的記得我的功能,但我無法弄清楚如何獲得的cookie,以便SignInStatus返回RequiresVerifacation溝此設置。實際上,我甚至不能100%確定該Cookie正在導致它。我所知道的是我已經啓用了TFA,並且在AspUsers表中,我可以看到TwoFactorEnabled設置爲true,但狀態總是以成功的形式返回。

這裏是哪裏,我沒有得到我想要

[AllowAnonymous] 
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl) 
    { 
     var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); 
     if (loginInfo == null) 
     { 
      return RedirectToAction("Login"); 
     } 

     // Sign in the user with this external login provider if the user already has a login 
     var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false); 
     var user = await UserManager.FindByIdAsync(User.Identity.GetUserId()); 
     switch (result) 
     { 
      case SignInStatus.Success: 
       return RedirectToLocal(returnUrl); 
      case SignInStatus.LockedOut: 
       return View("Lockout"); 
      case SignInStatus.RequiresVerification: 
       return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false }); 
      case SignInStatus.Failure: 
      default: 
       // If the user does not have an account, then prompt the user to create an account 
       ViewBag.ReturnUrl = returnUrl; 
       ViewBag.LoginProvider = loginInfo.Login.LoginProvider; 
       return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { Email = loginInfo.Email }); 
     } 
    } 

根據this MSDN page VAR結果應該返回SignInStatus.RequiresVerification什麼控制器,但它返回成功當從返回的OAuth從谷歌簽署或只是一個普通的登錄。用戶在AspUsers表中將其TwoFactorEnabled設置爲true,這是根據文檔檢查的結果。

+0

您是否在代碼中調用登錄方法? –

回答

1

這個問題的解決方案實際上非常簡單。你只需要知道你在做什麼。 ASP身份很複雜,有很多移動部件。如果有人遇到這個與ASP.NET身份陷阱的帖子,我會推薦使用Microsoft視頻系列開始here來定製ASP身份。那裏有很多信息。本教程對於實施帶QR碼的TFA的Google Authenticator風格最有幫助的是here

相關問題