single sign on con identityserver
TRANSCRIPT
![Page 1: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/1.jpg)
18 Novembre 2016
Single Sign On con Identity ServerMauro Servienti
![Page 2: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/2.jpg)
A volte ritornano
ho fatto una sessione simile la prima volta a
Windows Developer Conferencenel 2012
![Page 3: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/3.jpg)
Mauro Servienti
appassionato di cibo e sportlo sport è in funzione del cibo
la tecnologia mi annoiaDicono di me: era un bravo programmatore (cit. Ema)
pretend to be an architect
![Page 4: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/4.jpg)
Coming out
ho un biglietto per i Depechee ho appena visto i Cure
![Page 5: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/5.jpg)
Sicurezza, ovunque sicurezza.Torniamo seri che la sicurezza è importante
![Page 6: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/6.jpg)
…e Trenitalia non sa cosa sia.Password in chiaro, case insentive. #ciaone
![Page 7: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/7.jpg)
Autenticazione e Autorizzazione
• Autenticazione: verifica che siate chi dite di essere• Ad esempio tramite una combinazione di Username e Password
• Autorizzazione: verifica che possiate fare quello che cercate di fare• Ad esempio tramite ruoli e claim
![Page 8: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/8.jpg)
«claim» questi sconosciuti
• Abbiamo sempre pensato in termini di Gruppi/ACL• .NET ha introdotto nel 2001 i «ruoli»• Mai decisione fu più nefasta :-)
• Finalmente i «claim» cercano di mettere ordine nel caos • È semplicemente un attributo dell’utente• Il nome, lo user-id, la mail, i ruoli, l’età possono essere tutti «claim»
• È compito, come è ovvio che sia, del client decidere come interpretarlo
![Page 9: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/9.jpg)
Profiles
Claims
Come funziona di solito
Applicazione Backend/FBA
Users
![Page 10: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/10.jpg)
È veramente un problema nostro?
• Date le seguenti «robe»:• Utenti• Claim• Profili
• Ce ne dobbiamo occupare noi?• No, o meglio non proprio:• Utenti: no• Claim: probabilmente in parte• Profili: si
![Page 11: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/11.jpg)
Perché gli utenti no
• smazzarsi la gestione sicura di username e password è noioso• Quanti di voi fanno hashing con salt random delle password?• Quanti di voi hanno il supporto per 2FA?• Quanti di voi hanno SSL EV?• Quanti di voi hanno 2FA per il cambio password?
• gli utenti odiano creare un altro utente per usare un servizio• la privacy è una rottura che non volete gestire
![Page 12: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/12.jpg)
Perché i claim in parte si
• Molti claim comuni a tanti utenti a prescindere• altri no sono peculiari• Non è quindi detto che quello che ci troviamo a disposizione basti
![Page 13: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/13.jpg)
Perché i profili si
• Il profilo è un problema totalmente applicativo• Un «utente», inteso come user, rappresenta l’utente in generale• Un profilo rappresenta un utente nel contesto applicativo
![Page 14: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/14.jpg)
la federazioneIt’s a long way to the top if you wanna rock ‘n’ roll…
![Page 15: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/15.jpg)
La federazione
App Backend/FBA
Trusted3rd party
STS
Non
è u
n pr
oble
ma
nost
ro
Profiles
Claims
Users
nameidentifier
nameidentifier
![Page 16: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/16.jpg)
STS (security token service)
• Non è un problema nostro: ci limitiamo alla fiducia• Il suo unico ruolo è emettere Security Token• Tipicamente dopo aver verificato le credenziali, qualsiasi esse siano
• Un Security Token:• È crittografato e firmato• La fiducia di cui sopra dice che lo possiamo spacchettare• Contiene tutte le informazioni relative all’utente
![Page 17: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/17.jpg)
Il flusso federato
• L’utente si presenta e non è autenticato• L’applicazione lo rimbalza verso l’STS• Dandogli un token che identifica l’applicazione• Token che solo l’STS può spacchettare
• L’utente si presenta all’STS con il token• L’STS a questo punto sa da dove arriva l’utente
• L’utente si autentica con le sue credenziali• L’STS genera un security token valido e con una scadenza• L’utente torna dall’applicazione• L’applicazione spacchetta il security token e sa che l’utente è buono
![Page 18: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/18.jpg)
Applicazione Autorizzazione Applicazione
Autenticazione e richiesta di accesso
Generazionedel Token
Accesso all’API con il Token
![Page 19: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/19.jpg)
La federazione
App Backend/FBA
Trusted3rd party
STS
Non
è u
n pr
oble
ma
nost
ro
Profiles
Claims
Users
nameidentifier
nameidentifierAd esempio Google
![Page 20: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/20.jpg)
Uno solo!?111?1?!!!Gomblotto :-)
![Page 21: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/21.jpg)
Abbiamo abituato bene i nostri utenti…
![Page 22: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/22.jpg)
Un STS non ci basta più
• Abbiamo bisogno di un ACS• Access Control Service
• Fa da proxy verso uno o più STS• Noi ci fidiamo dell’ACS, lui si fida degli STS• E per proprietà transitiva siamo tutti felici
• Possiamo fare self-hosting dell’ACS• APS.Net 4 lo faceva
• Possiamo delegare a terze parti come l’IdentityServer di Thinktecture• Di cui a sua volta si può fare self-hosting
![Page 23: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/23.jpg)
FacebookGoogle Account
La federazioneApp Backend
Custom FBA
Profiles
IdentityServerACS
Active Directory MS Account
nameidentifier
Non
è u
n pr
oble
ma
nost
ro
![Page 24: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/24.jpg)
FacebookGoogle Account
Ad ognuno il suo protocollo
Custom FBA
IdentityServerACS
Active Directory MS Account Twitter
![Page 25: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/25.jpg)
Applicazione Autorizzazione Applicazione
Autenticazione e richiesta di accesso
Generazionedel Token
Accesso all’API con il Token
Azure ACS
Autenticazione
Consenso
Codice di AccessoCodice di Accesso
![Page 26: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/26.jpg)
Ma non è così semplice
![Page 27: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/27.jpg)
Lei e lui
• Gli attori sono due• Utente• ApplicazioneUtente Applicazione
STS/ACS
![Page 28: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/28.jpg)
Lei, lui e l’altra
• Gli attori sono tre• Utente• Applicazione• API
• L’utente vuole accedere all’API• Attraverso l’applicazione• Una SPA deve funzionare così• Tipicamente si parla di OAuth
Utente Applicazione
STS/ACS
API
![Page 29: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/29.jpg)
OAuthUna piccola nota di redazione…
![Page 30: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/30.jpg)
The problem is that OAuth 2.0 is a Delegated Authorization protocol, and not
a Authentication protocol. ...OAuth provides an access token to a client, so
that it can access a protected resource, based on the permission of the resource owner.
Fonte: http://www.thread-safe.com/2012/01/problem-with-oauth-for-authentication.html
![Page 31: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/31.jpg)
Demo
![Page 32: Single Sign On con IdentityServer](https://reader036.vdocument.in/reader036/viewer/2022062522/58a34c0f1a28ab62248b689d/html5/thumbnails/32.jpg)
GrazieMauro Servienti Solution Architect @ Particular Software | @mauroservienti | //blogs.ugidotnet.org/topics/