Ciao,
In pratica tu dici di crearmi un middleware che tramite ti i li username (univoco)
Sì, puoi anche associare i ruoli all'utente senza creare alcun "Admin", "Manager" e così via. In questo modo puoi avere una configurazione di ruoli personalizzata per utente.
Io però penso che qualche archetipo di profilo (es. "Admin") il tuo tenant lo vorrà avere, almeno per impostare velocemente un insieme di ruoli di partenza. Poi il tuo tenant potrebbe aggiungerli o toglierli a piacimento senza essere vincolato da ciò che è previsto dall'archetipo.
...ammesso che tu voglia consentire al tuo tenant di arrivare a questo livello di personalizzazione per utente. Altrimenti gli fai impostare un profilo (Es. "Admin") e basta.
recuperi i ruoli utente i li inietti come claim.
Sì, perché i ruoli sono molto specifici (es. "Customer.Create") e finirai per averne una marea. Infilarli tutti nel cookie di autenticazione sarebbe certamente possibile, ma se ogni utente ne ha a centinaia, il cookie potrebbe diventare grandino e arrivare fino al suo limite fisico di 4KB. Qui devi valutare tu: se hai pochi ruoli e riesci a restare ben sotto la soglia dei 4KB, li puoi infilare direttamente nel cookie (e nel token) come claim e non ci sarà bisogno di crearsi un middleware che li vada a pescare dal database (o dalla cache).
new Claim(CustomClaimTypes.Permission, "Customer.Create") giusto?
No, aggiungilo come ClaimTypes.Role, così potrai sfruttare l'attributo [Authorize(Roles="Customer.Create")].
Oppure ti crei un attributo Authorize personalizzato.
Ma tu dici di passare in fase di login i claims? O di iniettarli ad ogni richiesta?
Come dicevo qui sopra: se sono pochi puoi metterli direttamente nel cookie. Se sono tanti non ci metti nulla e poi però dovrai recuperarli ad ogni richiesta dalla cache in base all'utente o al suo profilo (es. "Admin"). Questa sarà un'operazione rapida se sfrutti la cache.
entityframework codefirst per creare applicationdbcontext
Se non vuoi usare EFCore ok, ma non rinunciare ad ASP.NET Core Identity perché ha tante funzionalità di sicurezza che renderanno sicuri i dati dei tuoi utenti. Ecco come realizzare uno user store personalizzato (ma non sarà la cosa più semplice di questo mondo).
https://docs.microsoft.com/it-it/aspnet/core/security/authentication/identity-custom-storage-providers?view=aspnetcore-2.2#customize-the-user-storeciao,
Moreno