2. A volte ritornano
ho fatto una sessione simile
la prima volta a
Windows Developer Conference
nel 2012
3. Mauro Servienti
appassionato di cibo e sport
lo sport è in funzione del cibo
la tecnologia mi annoia
Dicono di me: era un bravo programmatore (cit. Ema)
pretend to be an architect
4. Coming out
ho un biglietto per i Depeche
e ho appena visto i Cure
6. …e Trenitalia non sa cosa sia.
Password in chiaro, case insentive. #ciaone
7. 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
8. «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
10. È 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
11. 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
12. 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
13. 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
16. 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
17. 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
22. 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
27. Lei e lui
• Gli attori sono due
• Utente
• ApplicazioneUtente Applicazione
STS/ACS
28. 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
30. 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