Generazione di token per la convalida della posta elettronica e la sicurezza della registrazione

3

Il mio capo mi ha fornito un elenco di 8K utenti in formato csv e mi ha chiesto di creare account per loro. L'elenco contiene utenti con indirizzi email Gmail, Hotmail e organizzazione.

Sto utilizzando MVC 5 e identità ASP.NET 2.

Mentre sto leggendo il file CSV, sto creando l'utente e generando un token come segue:

var userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(_db));

var dataProtectionProvider = new DpapiDataProtectionProvider("Sample");
userManager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity")); 

string code = userManager.GenerateEmailConfirmationToken(appUser.Id);
var callbackUrl = "http://localhost:2595/Account/Verify?t="+appUser.Id+"&c="+HttpUtility.UrlEncode(code);
SendMail(callbackUrl, appUser.Email);

Una volta creato un URL di richiamata, invio un'email all'utente. Quando l'utente fa clic sul link che ho inviato, l'utente accede a una pagina di registrazione della password, crea una password e quindi accede con la password creata.

Questo approccio ha qualche difetto di sicurezza?

public async Task<ActionResult> Verify(string t, string c)
        {
            if (User.Identity.IsAuthenticated)
            {
                AuthenticationManager.SignOut();
                return RedirectToAction("Index","Home");
            }

            if (t == null || c == null)
            {
                return View("Error");
            }

            var user = UserManager.FindById(t);

            if (user == null)
            {
                return View("Error");
            }

            if (user.EmailConfirmed)
            {
                return View("AlreadyConfirmed");
            }

            var result = await UserManager.ConfirmEmailAsync(t, c);
            if (result.Succeeded)
            {
                user.EmailConfirmed = true;
                UserManager.Update(user);

                ViewBag.Id = t;
                return View("ConfirmEmail");
            }

            AddErrors(result);

            return View();
        } 
    
posta DarthVader 05.02.2015 - 21:36
fonte

1 risposta

2

Sembra abbastanza sicuro considerando i dettagli che hai commentato, ma penso che il miglior modo di agire sarebbe quello di tagliare l'ID utente fuori dal callback e fare in modo che l'utente effettui il login normalmente per procedere con l'autenticazione se non sono già registrati . L'esposizione non è male come è, quindi se è un problema reindirizzare nuovamente alla pagina di autenticazione dopo il login, direi che va bene.

    
risposta data 05.02.2015 - 22:36
fonte

Leggi altre domande sui tag