1

Selon MSDNImpossible de configurer UserCookie pour revenir SignInStatus correct pour l'authentification à deux facteurs

Tant le journal local et le journal social en vérification pour voir si 2FA est activé. Si 2FA est activé, la méthode d'ouverture de session SignInManager renvoie SignInStatus.RequiresVerification et l'utilisateur sera redirigé vers la méthode d'action SendCode, où il devra entrer le code pour terminer la séquence de connexion. Si l'utilisateur a RememberMe est défini sur le cookie local des utilisateurs, SignInManager renverra SignInStatus.Success et n'aura pas à passer par 2FA.

Je ne veux que l'utilisateur pour pouvoir utiliser la fonction me souvenir de l'application, mais je ne peux pas comprendre comment obtenir le cookie fossé ce paramètre afin que le retour SignInStatus RequiresVerifacation. Je ne suis même pas sûr à 100% que le cookie le provoque. Tout ce que je sais, c'est que j'ai activé TFA et dans la table AspUsers, je peux voir que TwoFactorEnabled est défini sur true, mais le statut revient toujours en tant que succès.

Voici le contrôleur où je ne reçois pas ce que je veux

[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 }); 
     } 
    } 

Selon this MSDN page var result devrait revenir SignInStatus.RequiresVerification mais il renvoie un succès lors du retour de signer le OAuth de google ou juste un régulier La valeur TwoFactorEnabled de l'utilisateur est définie sur true dans la table AspUsers, ce qui correspond à la vérification des documents.

+0

Avez-vous le code dans lequel vous appelez une méthode de connexion? –

Répondre

1

La solution à ce problème était en réalité incroyablement simple. Vous avez juste besoin de SAVOIR CE QUE VOUS FAITES. ASP L'identité est complexe et il y a beaucoup de pièces mobiles. Si quelqu'un rencontre ce post aux prises avec l'identité ASP.NET, je recommande de commencer here avec la série de vidéos Microsoft sur la personnalisation de l'identité ASP. Il y a beaucoup d'informations là-bas. Le tutoriel le plus utile pour implémenter un style Google Authenticator de TFA avec des codes QR est here