SlideShare a Scribd company logo
1 of 38
1
TOPIC
Creare un sistema
di autenticazione
per microservizi
Utilizza .net core 3 e identity server 4 con
autenticazione oauth2
Who I am
https://twitter.com/alessandroperu4
https://github.com/alexpera84
https://www.linkedin.com/in/alessandro-
perugini-25885449/
Alessandro perugini
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
Pacchetto da Git
A questo link è disponibile la parte di codice
implementativo che vedremo nel seguito:
https://dev.azure.com/Perugins/_git/IdentityServerDemo
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à.
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
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
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.
OAuth 2.0
In questa struttura sono previsti 4 ruoli:
• Resource Owner
• Client
• Resource Server
• Authorization Server
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].
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.
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.
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.
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.
Il flusso concettuale
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
Authorization code
Implicit
Resource Owner Password Credentials
Client Credentials
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.
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
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.
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
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
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 });
}
Configurazione del client bearer Api resource
Nuget Microsoft.AspNetCore.Authentication.JwtBearer
services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.Audience = "api1";
});
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
Creazione di un client Resource Owner Password Credentials
var tokenResponse = await
client.RequestPasswordTokenAsync(new PasswordTokenRequest
{
Address = disco.TokenEndpoint,
ClientId = "ro.client",
ClientSecret = "secret",
UserName = "alice",
Password = "password",
Scope = "api1"
});
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;
});
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
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
Schema
applicativo
Authorization
server
Api
Management
App
Web browser
Servizi
Gestione
utente
Gestione
magazzino
Gestione
catalogo
Gestione
pagamento
Gestione
assistenza
Api management
Api management è uno strumento per creare, governare e
distribuire API, gestendone il versioning, la reperibilità e
definendone i limiti d’uso.
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.
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
DEMO
Thanks
Questions?
https://github.com/al
expera84
https://twitter.com/al
essandroperu4
https://www.linkedin.
com/in/alessandro-
perugini-25885449/

More Related Content

Similar to Global azure2020 identityserver

CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...DotNetMarche
 
Kubernetes e bello, sicuro è meglio!
Kubernetes e bello, sicuro è meglio!Kubernetes e bello, sicuro è meglio!
Kubernetes e bello, sicuro è meglio!Giuliano Latini
 
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...azuredayit
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applicationsDotNetCampus
 
Self hosted Services with .NET OWin
Self hosted Services with .NET OWinSelf hosted Services with .NET OWin
Self hosted Services with .NET OWinNicolò Carandini
 
CCI2018 - Implementazione di una PKI in Windows Server e automazione del cicl...
CCI2018 - Implementazione di una PKI in Windows Server e automazione del cicl...CCI2018 - Implementazione di una PKI in Windows Server e automazione del cicl...
CCI2018 - Implementazione di una PKI in Windows Server e automazione del cicl...walk2talk srl
 
La sicurezza delle Web Application - SMAU Business Bari 2013
La sicurezza delle Web Application - SMAU Business Bari 2013La sicurezza delle Web Application - SMAU Business Bari 2013
La sicurezza delle Web Application - SMAU Business Bari 2013Massimo Chirivì
 
Smau Bari 2013 Massimo Chirivì
Smau Bari 2013 Massimo ChirivìSmau Bari 2013 Massimo Chirivì
Smau Bari 2013 Massimo ChirivìSMAU
 
The absolute need of Secure Http
The absolute need of Secure HttpThe absolute need of Secure Http
The absolute need of Secure HttpNicolò Carandini
 
WSO2 IAM - Identity Access Management - Introduzione e Roadmap
 WSO2 IAM - Identity Access Management - Introduzione e Roadmap WSO2 IAM - Identity Access Management - Introduzione e Roadmap
WSO2 IAM - Identity Access Management - Introduzione e RoadmapProfesia Srl, Lynx Group
 
What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012Andrea Dottor
 
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Codemotion
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP WayLuca Milan
 
DomusDotNet, DotNetCode & dotNET{podcast} Meetup - Serverless Computing - Gio...
DomusDotNet, DotNetCode & dotNET{podcast} Meetup - Serverless Computing - Gio...DomusDotNet, DotNetCode & dotNET{podcast} Meetup - Serverless Computing - Gio...
DomusDotNet, DotNetCode & dotNET{podcast} Meetup - Serverless Computing - Gio...Codemotion
 
ASP.NET AND Azure Function
ASP.NET AND Azure FunctionASP.NET AND Azure Function
ASP.NET AND Azure FunctionLuca Congiu
 
Liferay: Esporre Web Services Custom
Liferay: Esporre Web Services CustomLiferay: Esporre Web Services Custom
Liferay: Esporre Web Services CustomAntonio Musarra
 
Applicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e KatanaApplicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e KatanaNicolò Carandini
 
Azure Web Apps: portare il tuo sito sul cloud
Azure Web Apps: portare il tuo sito sul cloudAzure Web Apps: portare il tuo sito sul cloud
Azure Web Apps: portare il tuo sito sul cloudDavide Benvegnù
 

Similar to Global azure2020 identityserver (20)

Swagger per tutti
Swagger per tuttiSwagger per tutti
Swagger per tutti
 
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
 
Kubernetes e bello, sicuro è meglio!
Kubernetes e bello, sicuro è meglio!Kubernetes e bello, sicuro è meglio!
Kubernetes e bello, sicuro è meglio!
 
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applications
 
Self hosted Services with .NET OWin
Self hosted Services with .NET OWinSelf hosted Services with .NET OWin
Self hosted Services with .NET OWin
 
CCI2018 - Implementazione di una PKI in Windows Server e automazione del cicl...
CCI2018 - Implementazione di una PKI in Windows Server e automazione del cicl...CCI2018 - Implementazione di una PKI in Windows Server e automazione del cicl...
CCI2018 - Implementazione di una PKI in Windows Server e automazione del cicl...
 
La sicurezza delle Web Application - SMAU Business Bari 2013
La sicurezza delle Web Application - SMAU Business Bari 2013La sicurezza delle Web Application - SMAU Business Bari 2013
La sicurezza delle Web Application - SMAU Business Bari 2013
 
Smau Bari 2013 Massimo Chirivì
Smau Bari 2013 Massimo ChirivìSmau Bari 2013 Massimo Chirivì
Smau Bari 2013 Massimo Chirivì
 
The absolute need of Secure Http
The absolute need of Secure HttpThe absolute need of Secure Http
The absolute need of Secure Http
 
WSO2 IAM - Identity Access Management - Introduzione e Roadmap
 WSO2 IAM - Identity Access Management - Introduzione e Roadmap WSO2 IAM - Identity Access Management - Introduzione e Roadmap
WSO2 IAM - Identity Access Management - Introduzione e Roadmap
 
What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012
 
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP Way
 
DomusDotNet, DotNetCode & dotNET{podcast} Meetup - Serverless Computing - Gio...
DomusDotNet, DotNetCode & dotNET{podcast} Meetup - Serverless Computing - Gio...DomusDotNet, DotNetCode & dotNET{podcast} Meetup - Serverless Computing - Gio...
DomusDotNet, DotNetCode & dotNET{podcast} Meetup - Serverless Computing - Gio...
 
ASP.NET AND Azure Function
ASP.NET AND Azure FunctionASP.NET AND Azure Function
ASP.NET AND Azure Function
 
Corso di servlet jsp e pattern
Corso di servlet jsp e patternCorso di servlet jsp e pattern
Corso di servlet jsp e pattern
 
Liferay: Esporre Web Services Custom
Liferay: Esporre Web Services CustomLiferay: Esporre Web Services Custom
Liferay: Esporre Web Services Custom
 
Applicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e KatanaApplicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e Katana
 
Azure Web Apps: portare il tuo sito sul cloud
Azure Web Apps: portare il tuo sito sul cloudAzure Web Apps: portare il tuo sito sul cloud
Azure Web Apps: portare il tuo sito sul cloud
 

More from Alessandro Perugini (13)

A cqua pubblica
A cqua pubblicaA cqua pubblica
A cqua pubblica
 
Sport e varie
Sport e varieSport e varie
Sport e varie
 
Urbanistica e lavori pubblici
Urbanistica e lavori pubbliciUrbanistica e lavori pubblici
Urbanistica e lavori pubblici
 
Slide sanita sociale
Slide sanita socialeSlide sanita sociale
Slide sanita sociale
 
Istruzione giovani&lavoro
Istruzione giovani&lavoroIstruzione giovani&lavoro
Istruzione giovani&lavoro
 
Turismo
TurismoTurismo
Turismo
 
La biblioteca comunale
La biblioteca comunaleLa biblioteca comunale
La biblioteca comunale
 
Slide sanita sociale
Slide sanita socialeSlide sanita sociale
Slide sanita sociale
 
Amministrazione ed innovazione
Amministrazione ed innovazioneAmministrazione ed innovazione
Amministrazione ed innovazione
 
Programma
ProgrammaProgramma
Programma
 
Raccolta differenziata
Raccolta differenziataRaccolta differenziata
Raccolta differenziata
 
Bersaglio marzo
Bersaglio marzoBersaglio marzo
Bersaglio marzo
 
hjkhkjh
hjkhkjhhjkhkjh
hjkhkjh
 

Global azure2020 identityserver

  • 1. 1 TOPIC Creare un sistema di autenticazione per microservizi Utilizza .net core 3 e identity server 4 con autenticazione oauth2
  • 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
  • 19. Resource Owner Password Credentials
  • 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 }); }
  • 27. Configurazione del client bearer Api resource Nuget Microsoft.AspNetCore.Authentication.JwtBearer services.AddAuthentication("Bearer") .AddJwtBearer("Bearer", options => { options.Authority = "http://localhost:5000"; options.RequireHttpsMetadata = false; options.Audience = "api1"; });
  • 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
  • 29. Creazione di un client Resource Owner Password Credentials var tokenResponse = await client.RequestPasswordTokenAsync(new PasswordTokenRequest { Address = disco.TokenEndpoint, ClientId = "ro.client", ClientSecret = "secret", UserName = "alice", Password = "password", Scope = "api1" });
  • 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
  • 37. DEMO