78 messaggi dal 18 aprile 2018
Ciao Moreno,
ho fatto un po di test per capire un pò come funziona il CORE, andati bene i test preliminari ora procedo con i test di conversione dall'app web al core così da fare sole chiamate al core e sfruttarlo per il futuro.
Abbiamo acquistato un template che può essere convertito in un'app utilizzando PhoneGap o Cordova.

A questo punto mi viene spontanea una domanda, per fare le richieste all' API ho abilitato i CORS inserendo una policy(Quindi ora si accede liberamente, al max ho visto che si può mettere la fonte da cui accettare le richieste)

Qualche giorno fa ho partecipato ad una sessione proprio sul CORE, e si è parlato del token JWT e penso sia utile implementarlo.
L'applicazione funzionerà in questo modo:
Ho già un database con una serie di dati degli utenti, per accedere ai loro dati dovranno registrarsi( in autonomia ),
ES: inseriranno il CF, verifico se esiste sul DB Esistente, se il CF esiste potranno registrarsi e nome utente e password verranno inseriti nel DB di supporto (creato apposta per le registrazioni).

premetto che le 2 applicazioni (CORE e CLIENT) sono sulla stessa macchina.

Stavo leggendo questa guida:
http://www.aspitalia.com/script/1288/Autenticazione-JWT-Token-ASP.NET-Core-Web-API.aspx


Se ho capito bene, dovrei procedere prima la con l'inserimento nel CORE delle classi EF per la gestione di registrazione e login, e successivamente applicare la guida in modo che dopo il login venga rilasciato il token. Giusto?

AGGIORNAMENTO:

ho creato un applicazione MVC di prova e generato il DB classico che viene creato quando si registra un utente.

Poi ho cercato di tirar fuori qualcosa di buono da queste 2 guide:

https://docs.microsoft.com/it-it/ef/core/get-started/aspnetcore/existing-db

https://docs.microsoft.com/it-it/ef/core/get-started/aspnetcore/new-db?tabs=visual-studio

Quindi ho collegato il database e mi sono generato tramite il comando

Scaffold-DbContext


le classi contenenti equivalenti alle tabelle presenti nel DB. Quindi tra le mie classi ho delle classi che in un applicazione MVC non ci sono. ( AspNetUser, AspNetRoles, ecc.. )

Ho creato un controller API chiamato Account, e ho messo questo codice:


        // POST: api/Account
        [HttpPost]
        public void PostAsync([FromBody] RegisterViewModel model)
        {

            var  user = new AspNetUsers { Id=Guid.NewGuid().ToString(), UserName = model.Email, Email = model.Email };

            db.Add(user);
            db.SaveChangesAsync();

           // return Get(""); vani i tentativi di ritornare qualcosa, solo con questo commentato sono riuscito a scrivere nel DB
        }


questo aimè è stato l'unico modo in cui sono riuscito a scrivere nel DB, non usando quindi Idenity.

Come posso fare per implementare idenitity nel core?

o se c'è un sistema equivalente per core...



AGGIORNAMENTO:


Ho trovato una guida non so se posso pubblicare il link.. comunque sembra faccia al caso mio, permette la creazione, il login e il token JWT ( nel controller non come la tua guida che cercherò di implementare per non metterlo nel controller ) una delle differenze è anche nella password, a differenza di entity che utilizza varchar e MD5, questa utilizza byte e HASH 512, anche se ho fatto la conversione per testarla ed ho usato string, ora mi sono generato un db con la modalità descritta sopra e ho inserito byte anche io,se posso pubblicare il link te la faccio vedere così magari sto tranquillo che è valida ed è all'altezza di idenity.
Ho però notato che in startup.cs mi segnala come deprecato il metodo "ILoggerFactory"

di seguito il mio codice:


 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            // global cors policy
            app.UseCors(x => x
                .AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials());

            app.UseAuthentication();

            app.UseMvc();
        }



vani sono stati i tentavi di risolvere, visual studio mi suggerisce di utilizzare ILoggingBuilder, che ho provato ad utilizzare così


 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggingBuilder loggerBuilder)
        {
            loggerBuilder.AddConfiguration(Configuration.GetSection("Logging"));
            loggerBuilder.AddConsole();
            loggerBuilder.AddDebug();

            // global cors policy
            app.UseCors(x => x
                .AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials());

            app.UseAuthentication();

            app.UseMvc();
        }



L'utente però non viene mappato, esegue l'autenticazione ma poi al primo get che faccio la perde, ho provato
guide in rete ma l'utente continua a non essere mappato.
Modificato da Mirko2018 il 27 dicembre 2018 16.40 -
11.382 messaggi dal 09 febbraio 2002
Contributi
Ciao Mirko,
sì, posta il link alla guida che hai trovato.

Per prima cosa dovresti partire da un progetto base che usa Identity e EF Core. Segui questo, che ti spiega come personalizzare vari aspetti.
http://www.aspitalia.com/articoli/asp.net-core/personalizzare--aspnet-core-identity.aspx

In un secondo momento, aggiungerai l'emissione dei token. Per questo ti sarà utile l'altro mio script che hai già trovato.


questo aimè è stato l'unico modo in cui sono riuscito a scrivere nel DB, non usando quindi Idenity.

Non va bene perché le modifiche agli utenti devono essere fatte usando lo UserManager.
Scaricati gli esempi del libro che trovi qui (non devi aver comprato il libro per scaricarli).
http://books.aspitalia.com/ASP.NET-Core/
All'interno della sezione 18 troverai un'applicazione di esempio che ti mostra come manipolare gli utenti usando appunto lo UserManager.
All'inteno della sezione 17 invece trovi l'esempio ui-and-api-auth che ti mostra come emettere i token. E' un'applicazione che include EF, Identity e JWT Token come serve a te.


a differenza di entity che utilizza varchar e MD5

Non è vero che usa MD5, sarebbe altamente insicuro. Le password passano attraverso un algoritmo di derivazione per qualche migliaio di volte, così da scoraggiare i tentativi di accesso brute force.

ciao,
Moreno

Enjoy learning and just keep making
11.382 messaggi dal 09 febbraio 2002
Contributi
Ho visto la guida, il link era questo:
http://jasonwatmore.com/post/2018/06/26/aspnet-core-21-simple-api-for-authentication-registration-and-user-management
Non so perché l'autore abbia voluto mettersi lui a fare l'hashing della password anziché sfruttare ASP.NET Core Identity che già permette di fare questa cosa grazie a un componente interno chiamato PasswordHasher. Oltretutto, Identity offre un livello di sicurezza maggiore perché viene usato un appropriato algoritmo di derivazione PBKDF2 che, come dicevo prima, scoraggia gli attacchi brute-force perché è intenzionalmente molto più lento di un semplice hash SHAxxx.

Usa sempre lo UserManager per tutte le operazioni sugli utenti e non sbagli. Va bene per qualsiasi cosa tu debba fare, ad esempio: creare un utente, cambiare la password, aggiungere claim/ruoli, resettare il security stamp e così via.

ciao,
Moreno
Modificato da BrightSoul il 02 gennaio 2019 19.59 -

Enjoy learning and just keep making
78 messaggi dal 18 aprile 2018
Eccomi, dopo un po di prove alla fine ci sono riuscito, e con postman funziona tutto, ho aggiunto anche il recovery password con la generazione di un token con questo codice


  var user = await userManager.FindByNameAsync(email.email);

            if (user == null || !(userManager.IsEmailConfirmedAsync(user).Result))
            {
                return this.Content("Errore durante il ripristino della password", "application/json");
            }

            var token = userManager.
         GeneratePasswordResetTokenAsync(user).Result;

            var resetLink = Url.Action("ResetPassword",
                            "Accounts", new { token = token },
                             protocol: HttpContext.Request.Scheme);


//e questo in configurationservices in startup per settare la validità del token a 12 ore:

            services.Configure<DataProtectionTokenProviderOptions>(options =>
             options.TokenLifespan = TimeSpan.FromHours(12));



una domanda, nel generare il db sql ho aggiunto delle tabelle come hai visto nei post precedenti, ma non riesco ad accedere a tabelle diverse da usermanager. Infatti se provo ad usare


private ApplicationDbContext db = new ApplicationDbContext();



mi restituisce che non sono stati specificati argomenti option in quanto giustamente è così definito:

public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }


per accedere alle altre tabelle del DB che si sono create devo seguire questa guida? https://docs.microsoft.com/it-it/ef/core/get-started/aspnetcore/existing-db , (La stessa che ho utilizzato per mappare le tabelle di un altro db con cui devo interfacciarmi da questa applicazione)

Grazie mille come sempre, e grazie per il tuo tempo
Modificato da Mirko2018 il 02 gennaio 2019 18.00 -
11.382 messaggi dal 09 febbraio 2002
Contributi
Ciao Mirko,


private ApplicationDbContext db = new ApplicationDbContext();

Meglio non usare la parola chiave new. Dovresti sfruttare il meccanismo di dependency injection di ASP.NET Core e ricevere l'ApplicationDbContext come parametro del costruttore delle tue classi.

Quindi ad esempio, se vuoi usare l'ApplicationDbContext in un controller:
public class HomeController : Controller
{
  private readonly ApplicationDbContext context;
  public HomeController(ApplicationDbContext context)
  {
     this.context = context;
  }
  public async Task<IActionResult> Index() {
     var news = await context.News.Take(3).ToListAsync();
     return View(news);
  }
}



L'ApplicationDbContext l'hai registrato dal metodo ConfigureServices della classe Startup, sì?

Segui questo, dove si vede l'invocazione a AddDbContext.
http://www.aspitalia.com/articoli/asp.net-core/personalizzare--aspnet-core-identity-p-2.aspx

ciao,
Moreno

Enjoy learning and just keep making

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.