710 messaggi dal 13 novembre 2008
Contributi
ciao, nel caso volessi proteggere anche l'email dell'utente che si registra, se inserisco

var user = new ApplicationUser { UserName = userName, Email =  _protector.Protect(model.Email)...... };

var result = await _userManager.CreateAsync(user, password);


ricevo l'errore Invalid Email, a causa della validazione di Identity in CreateAsync

ho pensato quindi di risolvere questo problema utilizzando un Custom Validator che in realtà non valida nulla di più ma cripta l'email

    public class UserValidatorProtectEmail<TUser> : IUserValidator<TUser>
           where TUser : ApplicationUser
    {

.....



      public Task<IdentityResult> ValidateAsync(UserManager<TUser> manager,
                                                  TUser user)


        {


                user.Email = _protector.Protect(user.Email);


                return Task.FromResult(IdentityResult.Success);


            }


...

}


Funziona, ma secondo te è accettabile? grazie
Modificato da teo prome il 17 maggio 2018 15.41 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Questo lo stai seguendo? Ho appena cominciato a documentarmi, non so ancora se può fare al caso tuo.
https://github.com/aspnet/Identity/pull/1562

Enjoy learning and just keep making
11.886 messaggi dal 09 febbraio 2002
Contributi
Aaaaallora, mi sono documentato un po'...

user.Email = _protector.Protect(user.Email);

Attenzione perché sullo stesso record ti trovi altri campi tipo NormalizedEmail, Username e NormalizedUsername che potrebbero contenere il valore dell'email ancora in chiaro.

In ottica GDPR, in ASP.NET Core 2.1 hanno aggiunto un punto di estendibilità per cifrare/decifrare i dati dell'utente. Ecco come configurarlo. Le classi LookupProtector e LookupProtectorKeyRing sono tue implementazioni.
services.AddDefaultIdentity<ApplicationUser>(o => {
  o.Stores.ProtectPersonalData = true;
  })
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddPersonalDataProtection<LookupProtector, LookupProtectorKeyRing>();

Però ho aggiunto questo commento alla issue che ti avevo linkato perché mi sono accorto che il metodo Protect non produce risultati deterministici. Di conseguenza, l'utente non può fare il login perché la mail cifrata non corrisponde a nessun valore nel database. Forse mi sfugge qualcosa, vediamo che rispondono.
Modificato da BrightSoul il 20 maggio 2018 17.06 -

Enjoy learning and just keep making
710 messaggi dal 13 novembre 2008
Contributi
risposta
'But ILookupProtector needs to be stable for logins to work, so you can't use data protection you will have to use something else'
....
al momento preferisco quindi farmi tutto a mano, campo per campo, Normalized vari compresi.... non so neanche se passerò alla 2.1 e tra un mese vado in produzione; il problema principale è l'email, perché li proprio non procede, dunque, il mio metodo secondo te per ora potrebbe essere accettabile?
Grazie Moreno.
11.886 messaggi dal 09 febbraio 2002
Contributi
Uhm, peccato. Magari per la RTM buttano lì un'implementazione di default del LookupProtector... hanno fatto tutto perfettamente e mancherebbe solo questo ultimo anello. Ho continuato la discussione, magari ne esce qualcosa.


secondo te per ora potrebbe essere accettabile?

Però... il punto è che Protect non restituisce risultati deterministici quindi quando l'utente fa il login con la sua mail, tu otterrai una stringa cifrata tutta nuova, che non esiste da nessuna parte nel db. Hai già verificato questa cosa? La mia idea attuale è: fai registrare l'utente con uno username vero e proprio, non con l'email. Così la mai la puoi proteggere, mentre lo username lo lasci non protetto. Non è la migliore soluzione però meglio che ad essere in chiaro sia lo username che la mail.

ciao,
Moreno

Enjoy learning and just keep making
710 messaggi dal 13 novembre 2008
Contributi
si... dipende da cosa è richiesto, e purtroppo nel mio caso la registrazione avviene con l'email, e da li non si scappa...
Devo fare un merge del codice e poi provo... Altrimenti occorre tirar su un'implementazione custom dell'algoritmo di crittografia
ciao
Modificato da teo prome il 21 maggio 2018 10.57 -
710 messaggi dal 13 novembre 2008
Contributi
dopo aver provato è corretto quello che dici e purtroppo non è possibile usare IDataProtectionProvider per es. l'email, quindi questa non può al momento essere una soluzione per LookupProtector o per l'implementazione completa per il GDPR...
Modificato da teo prome il 21 maggio 2018 11.22 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.