Amazon Cognito servizio per la gestione degli utenti e delle autenticazioni
da Massimo Della Rovere · pubblicato il 24 giugno, 2017 · modificato il 26 giugno, 2017

Quando si sviluppa un’applicazione, sia in ambiente mobile che in ambiente web, la gestione degli utenti e la loro autenticazione è una parte fondamentale dello sviluppo, e se deve essere fatta bene è anche molto complessa. Molte volte l’uso e la conoscenza di programmazione non basta e bisogna appoggiarsi a chi ha conoscenze sistemistiche, le quali in diversi casi vengono ignorate per questioni di costi e chi sviluppa il software si fa carico di questo aspetto, molte volte creando un sistema insicuro.

Amazon Cognito

Amazon dopo dieci anni di esperienza nel mondo del cloud computing ha capito molto bene questa esigenza e ha cercato di sviluppare un servizio chiamato Amazon Cognito che permettesse agli sviluppatori di usufruire immediatamente di un sistema di user account senza perdere tempo nello sviluppo di codice personalizzato e senza avere la necessità di conoscenze sistemistiche. Tutto questo a beneficio sia economico che di tempo.

Il servizio prevede moltissime feature ed è possibile configurarlo per diversi utilizzi, come sistema autosufficiente e completamente autogestito, ma anche come un sistema che può essere integrato ad una infrastruttura di autenticazione già esistente. Vedere tutte le sue funzionalità in un unico articolo vi posso assicurare che è molto difficile, quindi cercherò in questo articolo di riportare gli aspetti che ritengo più importanti e vi consiglio di leggere la documentazione ufficiale per avere ulteriori informazioni sul servizio.

Schema generale del servizio

Via allego qui di seguito un’immagine con le caratteristiche principali del servizio, prima di vederne i dettagli voglio sottolineare il fatto che il servizio è stato studiato per essere una soluzione serverless, quindi tutto il ciclo di autenticazione, l’accesso alle risorse AWS e gli eventi gestiti tramite lambda non hanno bisogno di nessuna infrastruttura da gestire, non dobbiamo configurare server, load balancer, firewall, etc etc.

Analizzando questo schema che trovate anche nella documentazione ufficiale di Amazon Cognito, possiamo iniziare a vedere che il servizio di autenticazione è valido sia per app che per applicazioni web. I dati di autenticazione possono essere gestiti dal pool nativo del servizio, dalle identità sociali e/o dai sistemi di autenticazione presenti nell’azienda o nell’applicazione già esistente. Una volta autenticati è possibile accedere alle risorse degli Amazon Web Services direttamente senza usare programmi di gateway, come è possibile usare il servizio di Amazon API Gateway e la sincronizzazione tra diversi device.

User Pool

La prima cosa che dobbiamo eseguire prima di utilizzare il servizio è la creazione di uno user pool. Andiamo nella nostra management console, selezioniamo il servizio di Cognito e scegliamo la regione geografica desiderata. Una volta nel servizio attiviamo l’opzione di Create a user pool con la quale dovremmo attivare la seguente schermata:

Anche se la definizione non è del tutto corretta pensiamo ad uno user pool come un contenitore di account che potrà essere utilizzato da  una o più applicazioni. Ogni account avrà dentro il pool le informazioni anagrafiche (personalizzabili), i riferimenti di contatto, le credenziali di accesso, i device utilizzati ed altre cose che vedremo a seguire.

Per creare un Pool dobbiamo definire un nome (forse la cosa più facile), degli attributi legati alle informazioni dell’account, le politiche di sicurezza, i processi di verifica, i template dei messaggi, i device, i client che hanno accesso al pool e i triggers. In realtà non si ha sempre la necessità di definire tutto questo durante la fase di creazione, molte volte è sufficiente creare il pool con i valori di default per poi andare a personalizzare tutti i singoli aspetti durante la configurazione e la messa in opera delle funzionalità.

  • Attributi: elenco dei campi che devono essere memorizzati insieme all’account, ad esempio nome, cognome, email, indirizzo, etc. Ammessi campi personalizzabili.
  • Politiche: opzioni per indicare la complessità della password, registrazione autonoma o permessa solo da amministratore e scadenza account in gg.
  • Verifiche: autenticazione con chiave a tempo, verifica della email o del telefono di registrazione con la spedizione di un SMS con codice di verifica.
  • Messaggi: personalizzare il subject e il corpo del messaggio per la registrazione, definire un template per la spedizione di messaggi SMS.
  • Devices: opzione per configurare la funzione di ricordo device.
  • App clients: creazione di chiavi per autorizzare l’accesso ad un applicazione.
  • Triggers: collegare diversi eventi alla esecuzione di funzioni lambda.

Screenshot finale

Registrazione

Una volta creato il pool gli utenti possono registrarsi da soli con un form di registrazione che è possibile personalizzare, possono essere aggiunti dall’amministratore del pool o possono essere importati tramite una procedura di import messa a disposizione.

Amazon mette a disposizione diversi SDK per diversi linguaggi di programmazione con cui è possibile integrare le funzioni di Cognito nel codice della propria applicazione, vi riporto un piccolo esempio presente sulla documentazione ufficiale, mentre i link ai vari SDKs disponibili li trovate nel proseguimento di questo articolo:

// Create a CognitoUserAttributes object and add user attributes
CognitoUserAttributes userAttributes = new CognitoUserAttributes();

// Adding user's given name.
userAttributes.addAttribute("given_name", userGivenName);

// Adding user's phone number 
userAttributes.addAttribute("phone_number", phoneNumber);

// Adding user's email address 
userAttributes.addAttribute("email", emailAddress);

Come potete vedere dal codice, negli SDK troviamo tutte le classi necessarie e i metodi delle azioni permesse dal servizio, senza dover studiare la struttura base delle API che diventerebbe necessario solo se vogliamo sviluppare con linguaggi non supportati.

Identità sociali

In un servizio di autenticazione moderno non poteva mancare l’integrazione con i social network, infatti Amazon Cognito ci permette di gestire delle identità sociali con cui è possibile eseguire le autenticazioni sui social network e gestire le autorizzazioni ai servizi AWS tramite lo stesso Cognito. Vi riporto qui di seguito uno schema generale:

Come potete vedere iniziando dalla sinistra il device esegue il login su un social network a scelta, il quale riceve un token che passa a Cognito, lo stesso Cognito comunicherà con il provider di login del social network e verificherà la sua validità (questo ci fa risparmiare anche diverso codice che non dobbiamo implementare), se l’operazione viene conclusa positivamente tornerà un access token al client con il quale sarà possibile richiedere delle credenziali temporanee con cui accedere ai servizi di Amazon AWS.

Amazon Cognito SDK

Come detto in precedenza abbiamo diversi SDK in cui vengono messe a disposizione delle classi e dei metodi per accedere facilmente ai servizi di Amazon Web Services. Ci sono degli SDK specifici per gli ambienti mobile e altri SDK per applicazioni tradizionali.

Riepilogo funzionalità

User Pool Strumenti e API per la gestione completa di un Pool.
Sign-in Collegamento usando email, telefono o username.
Sign-up Registrazione con diversi livelli di personalizzazione.
Verifica email Processo di verifica email prima di attivazione account.
Verifica telefono Processo di verifica telefono prima di attivazione account.
Password dimenticata Procedura di recupero password.
Profilo utente Processo per reperire e modificare attributi account.
SMS con MFA Se abilitato permette il login con un codice spedito tramite SMS.
Workflow Creazione di funzioni lamba per personalizzare i processi.
Password policies Impostazione dei requisiti minimi per la creazione di password.

Conclusione

Come detto ad inizio articolo, ho cercato di darvi solo alcune informazioni sul servizio di Amazon Cognito in modo che possiate capire se può fare al caso vostro e accendere la vostra curiosità, per tutto il resto vi invito a leggere la documentazione ufficiale e i diversi esempi che la stessa Amazon mette a disposizione. Troverete cose molto interessanti, come ad esempio la sincronizzazione automatica tra device e l’integrazione del servizio con i sistemi di autenticazione  già esistenti (Microsoft AD, ERP, etc).

1 Commento

  1. Avevo letto qualcosa un pò di tempo fa ma non avevo capito che si poteva usare anche nel WEB come ad esempio in Javascript, ero convinto che il prodotto era rivolto solo ad applicazioni Android o IOS. Così la cosa è molto più interessante, devo provarlo.

condividi