3. Cosa vedremo
• Basi di OAuth2
• Creazione di un IdentityServer tramite middleware
• Creazione dei vari client con la gestione delle diverse
modalità di authenticazione
• Gestione di servizio on-line
• Configurazione su Api Management
4. Pacchetto da Git
A questo link è disponibile la parte di codice
implementativo che vedremo nel seguito:
https://dev.azure.com/Perugins/_git/IdentityServerDemo
5. Cosa è un architettura a microservizi
• I microservizi sono un approccio allo sviluppo
dell’architettura software emerso in particolar modo per
sviluppare le applicazioni moderne di tipo Cloud-based.
• le applicazioni vengono scomposte in “piccoli” servizi
autonomi ed indipendenti tra loro che comunicano
tramite API ben definite, con l’obiettivo di semplificare il
processo di deployment e fornire software di alta
qualità in tempi rapidi.
• I microservizi permettono di scalare in modo più semplice
e soprattutto più veloce, promuovendo l’innovazione e
accelerando lo sviluppo di nuove funzionalità.
6. Perché utilizzare i microservizi?
• Eliminazione dei single point of failure
• Elevata scalabilità e resilienza
• Time-to-market
• Deployment semplificato
• Top performance
• Libertà nell’uso delle tecnologie
• Maggiore sperimentazione ed innovazione
• Codice riutilizzabile
• Flessibilità del linguaggio di sviluppo
• Sistema più agile
7. Perché non utilizzare i microservizi?
• Complessità di gestitre sistemi distribuiti
• Testing e integrazione
• Necessario un gateway
• Team di gestione del microservizio
• Valutazione del contesto di riferimento
8. Autenticazione ai microservizi
Solitamente i microservizi dialogano tramite rest api. Ogni
servizio deve poter essere autenticato e deve conoscere
l’identità dell’utente loggato o semplicemente garantirsi da
chiamate «malevole».
OAuth2 è un framework di autenticazione che permette di
accedere tramite un token JWT.
OAuth2 delega l’autenticazione utente e autorizza le terze
parti ad accedere impersonando l’utente del token.
9. OAuth 2.0
In questa struttura sono previsti 4 ruoli:
• Resource Owner
• Client
• Resource Server
• Authorization Server
10. Resource Owner: User
• Il Resource Owner è l' utente che
autorizza un'applicazione ad accedere al proprio
account.
• L'accesso dell'applicazione all'account dell'utente è
limitato al "campo di applicazione" dell'autorizzazione
concessa (ad es. Accesso in lettura o scrittura)[Scope].
11. Client
• Questa è un'applicazione o un servizio che può effettuare
richieste di risorse protette per conto del resource owner.
• L'applicazione client è l'applicazione che richiede
l'accesso alle risorse archiviate sul server delle risorse.
• L'applicazione client ottiene anche l'autorizzazione dal
proprietario della risorsa. L'applicazione client viene
anche definita client OAuth.
12. Resource Server
Questo è il server che ospita la risorsa o il servizio protetti. Il
server delle risorse può accettare e rispondere alle richieste
di risorse protette.
13. Authorization Server
• E’ il server di autenticazione che fornisce token di accesso
al client dopo aver autenticato correttamente il
proprietario della risorsa e aver ottenuto l'autorizzazione.
14. Authorization server:well-known
/authorize Interact with the resource owner and obtain an
authorization grant.
/token Obtain an access and/or ID token by presenting an
authorization grant or refresh token.
/introspect Return information about a token.
/revoke Revoke an access or refresh token.
/logout End the session associated with the given ID token.
/keysReturn public keys used to sign responses.
/userinfo Return claims about the authenticated end user.
/.well-known/oauth-authorization-server Return OAuth 2.0
metadata related to the specified authorization server.
/.well-known/openid-configuration Return OpenID Connect
metadata related to the specified authorization server.
16. I tipi di autenticazione
• Authorization Code: utilizzato con applicazioni lato server
• Implicit: utilizzato con app per dispositivi mobili o
applicazioni Web (applicazioni eseguite sul dispositivo
dell'utente)
• Resource Owner Password Credentials: utilizzate con
applicazioni affidabili, come quelle di proprietà del servizio
stesso
• Client Credentials: utilizzate con l'accesso all'API delle
applicazioni
https://tools.ietf.org/html/rfc6749
21. Cosa è IdentityServer 4?
E’ un server di autenticazione che permette di integrare
semplicemente tutte le funzioni di accesso e sicurezza
per la gestione in ambito di applicazioni web, api e app.
22. Implementazione di IdentityServer4 su .NET Core
Prima di iniziare a scrivere codice, gestisci il progetto su
HTTPS. Non esiste uno scenario in cui dovresti eseguire
un servizio di autenticazione senza TLS. Supponendo
che tu stia utilizzando IIS Express, puoi farlo aprendo le
proprietà del tuo progetto, accedendo alla scheda
Debug e facendo clic su "Abilita SSL".
https://docs.microsoft.com/it-it/archive/blogs/robert_mcmurray/how-to-trust-the-iis-express-self-signed-
certificate
23. Identity server 4
Authentication as a Service: Logica di accesso centralizzata e flusso di lavoro per tutte le tue applicazioni (web, nativo,
mobile, servizi).
Single Sign-on / Sign-out: Single sign-on (e out) su più tipi di applicazione.
Access Control for APIs: Emette token di accesso per API per vari tipi di client, ad es. da server a server, applicazioni web,
SPA e app native / mobili.
Federation Gateway: Supporto per provider di identità esterni come Azure Active Directory, Google, Facebook, ecc. Questo
protegge le applicazioni dai dettagli su come connettersi a questi provider esterni.
Focus on Customization: La parte più importante: molti aspetti di IdentityServer possono essere personalizzati in base alle
proprie esigenze.
24. Creazione del progetto di IdentityServer4
md src
cd src
dotnet new is4empty -n IdentityServer
cd IdentityServer
dotnet new is4ui
cd..
cd ..
dotnet new sln -n Quickstart
dotnet sln add .srcIdentityServerIdentityServer.csproj
25. Configurazione di Identity server in memory
var builder = services.AddIdentityServer()
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryApiResources(Config.GetApis())
.AddInMemoryClients(Config.GetClients());
http://localhost:5000/.well-known/openid-configuration
26. Generazione di una api
cd src
dotnet new web -n Api
cd..
dotnet sln add .srcApiApi.csproj
[HttpGet]
public IActionResult Get()
{
return new JsonResult(from c in User.Claims select new {
c.Type, c.Value });
}
28. Creazione client con autenticazione Client Credentials
dotnet new console -n Client
dotnet sln add .srcClientClient.csproj
dotnet add package IdentityModel
IdentityModel permette di avere estensioni su HttpClient
per avere il discover del nostro well-known
30. Aggiungo l’interfaccia per la gestione del login Implicit
• Creo un nuovo progetto MVC e aggiungo le configurazioni
openId
services.AddAuthentication
.AddOpenIdConnect("oidc", options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.ClientId = "mvc";
options.SaveTokens = true;
});
31. Gestione dell’authorize
Creo l’azione con [Authorize]
Aggiungo la pagina per leggere i miei claims
In questa maniera quando viene richiamata la pagina con
necessità di autenticazione la gestione inoltra la chiamata
alla pagina che abbiamo appena scaricato da template di
Identity Server
32. Architettura del nostro sistema
• Il sistema che andremo a descrivere è un e-commerce a
microservizi
• Gestione Catalogo: gestisce l’anagrafica dei prodotti da
vendere
• Gestione Magazzino: gestisce la disponibilità dei prodotti da
vendere e la loro spedizione
• Gestione Utente: gestisce il carrello dell’utente e lo storico
degli acquisti
• Gestione pagamento: gestisce i pagamenti del carrello che
l’utente ha riempito
• Gestione assistenza: gestisce le necessità dei clienti ed il
sistema di reso
34. Api management
Api management è uno strumento per creare, governare e
distribuire API, gestendone il versioning, la reperibilità e
definendone i limiti d’uso.
35. Api management
Api management serve per monitorare, ottimizzare e
rendere sicuro l’utilizzo delle API tramite il controllo degli
accessi, l’applicazione delle policy di sicurezza, il routing, il
caching, gli strumenti di analisi e monitoraggio.
36. Configurazione di un servizio su api Management con oauth
• Creo un api management su Azure (nuovo piano a
consume)
• Aggiungo la mia api tramite l’importazione OpenApi
• Aggiungo il server di auth nelle configurazioni delle api