Passa ai contenuti principali

OAuth2 per autorizzare accesso a Rest/API interne ed esterne

OAuth2 per autorizzare accesso a Rest/API interne ed esterne

Introduzione

Quello che si vuole ottenere è l'uso dell'autenticazione OAuth2 per validare le richieste interne ad una web app a microservizi e le richieste da parte di uno o più di questi microservizi verso servizi API esterni, nello specifico l'uso della posta di Google.

OAuth è uno standard che le applicazioni, i dispositivi, le API e i server possono usare per ottenere un "accesso delegato sicuro" basato su token anziché sulle credenziali.

Il meccanismo è lo stesso che consente l'autenticazione mediante account di terzi.

Dettagli

OAuth2

Lo standard OAuth2 prevede un meccanismo di autenticazione basato su "client-id" e "clientr-secret". Lo standard NON prevede autenticazioni stateless o stateful, non prevede specifici meccanismo di token (JWT o altro) ecc.
Per ogni dubbio futuro qui c'è l'RFC-6749 che lo definisce. 

OpenID

OpenID è un layer sopra OAuth2 che consente di verificare l'identità di un utente in base all'autenticazione eseguita da un server di autorizzazione. OpenID consente ai client (web, mobili, Javascript) di richiedere e ricevere informazioni su sessioni autenticate (consentendo un approccio stateful) e utenti. OpenID consente il discovery di provider OpenID, la gestione delle sessioni e la crittografia dei dati di identità.



Flusso OAuth2






(1) il client web "prova" ad invocare un servizio Rest/API direttamente o indirettamente ad un gateway
(2) il gateway gira la richiesta al servizio specifico
(3) il servizio risponde che l'end-poin puntato è protetto
(4) il gateway chiede l'autenticazione al server di autenticazione OAuth2
(5) il server OAuth2 invia al client web la pagina di login
(6) l'utente si autentica con le proprie credenziali al servizio OAuth2, questo verifica se è necessaria una conferma all'invio al servizio dei dati dell'utente
(7) il server OAuth2 chiede questa conferma all'utente
(8) l'utente accetta la conferma
(9) il server OAuth2 invia un "authorization code" al gateway
(10) il gateway chiede un token allegando l'authorization code
(11) il server OAuth2 risponde con il token
(12) il gateway inoltra la richiesta iniziale al servizio Rest/API questa volta con il token
(13) il servizio Rest/API chiede la verifica della firma del token al server OAuth2
(14) il server OAuth2 convalida la firma
(15) il servizio Rest/API risponde inviando la risorsa al gateway
(16) il gateway invia la risposta al client

Validazione esterna

Quello che ora si vuole ottenere è che una applicazione web si autentichi verso le API di Google per poter usare i servizi di questa, come ad esempio l'invio mail.

Questa pratica viene detta, da Google, autenticazione "OAuth da server a server". Il diagramma è il seguente:



Per poter eseguire questo meccanismo è necessario:

1) Creare un account di servizio su Google

2) Generare un Token Web Json (JWT)

3) Richiedere un token di accesso a Google

4) Usare questo token per fare le chiamate allo specifico servizio API di Google che si intende utilizzare.

1) Creare un account di servizio su Google

Puntare la pagina per i servizi di Google. Selezionare un progetto o crearne uno nuovo.

Selezionare la voce "+ CREA ACCOUNT DI SERVIZIO" e nella scheda di dettaglio inserisci un nome per l'account di servizio, un ID e una descrizione e dopo cliccare su "Crea".

Nella fase successiva si può specificare, facoltativamente, se assegnare un ruolo nel progetto allo specifico account di servizio che si sta creando, lasciamolo vuoto.

Cliccando su fine si ottiene la generazione di questo account di servizio che verrà rappresentato un una griglia con tutti gli altri eventualmente generati:


2) Ceazione di una chiave privata


Cliccando sui tre puntini verticali, che ho evidenziato in giallo nella figura precedente, si deve selezionare la voce dal menu "Crea chiave", scegliere il formato JSON. Si otterrà il download di una chiave in formato JSON che avrà questo contenuto:


L'elemento che ci interessa è "private_key_id", quella è la chiave privata che ci serve per firmare il JWT.


3) Abilitare il servizio

Tornare al menu generale e selezionare "API e servizi" > "Dashboard" e poi, dalla voce di menu superiore "+ABILITA API E SERVIZI":



Si aprirà un "catalogo" di API, selezionare quella desiderata, nel mio caso "Gmail API" e selezionare "Abilita".

Si viene portati in un menù contestuale nel quale nella voce "Credenziali" è elencata la chiave che abbiamo creato con l'account di servizio prima:

Cliccando sulla voce "Attiva" in alto a destra si attiva il servizio che è riservato agli account G Suite.


Fonte: https://www.soliantconsulting.com/blog/google-oauth-2-service-account/



Licenza Creative Commons

Commenti

Post popolari in questo blog

Telecamere Ip con accesso "nascosto"

Telecamere Ip con accesso "nascosto" Storia triste di un auto-hacking obbligato che mi ha fatto scoprire come la nostra privacy è realmente messa a rischi. Storia Ho acquistato dal mercatino/fiera del Radioamatore di Fasano quattro telecamere IP. La scatola riporta "Smart Camera" LF4810. Ne ho montata una e testata in tutte le sue funzionalità per oltre un mese. Chiaramente la manualistica scarsissima, come da tradizione in questi prodotti cinesi di costo molto concorrenziale, consiste in un "pieghevole" di 4 facciate. Chiaramente non erano documentate le impostazioni necessarie per attivare i protocolli ONVIF e RTSP che mi sono indispensabili per l'uso che ne devo fare. Nonostante questa scarsa documentazione dopo l'installazione base fatta con l'apposita app: tutto sembrava corretto. Chiaramente la prima azione che ho compiuto è stata quella di cambiare la password che di default è "123". Subito dopo h...

Dynamic DNS con Duckdns.org in HTTPS

Obiettivo Avere un dominio https con certificato valido da usare come endpoint pubblico per Homeassistant e per un WebHook per i bot telegram. Fase 1 Registrazione del dominio in un servizio di dynamic DNS come https://www.duckdns.org/   : Scegliere per quale sistema operativo installare il client che si occuperà dell'aggiornamento dell'ip: Seguire la semplice guida per la configurazione del processo cron: Fase 2 Creazione del certificato e installazione sul server. Di tutto questo si occuperà una applicazione che si chiama certbot. $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt install python-certbot-apache $ sudo certbot --apache -d ol3.duckdns.org -d www.ol3.duckdns.org Fase 3 Esporre il servizio https sulla rete pubblica. Aprire o reindirizzare la porta 443 verso l'host sul quale si è fatta la configurazione di certbot dal proprio router. Il certificato di certbot è valido per novanta giorn...

JHipster - Uso base

Cosa è JHipster è un "generatore di applicazioni" che fornisce tutto lo stack necessario ad implementare una applicazione web e/o a microservizi basata su Spring Boot e AngularJs. E' dotato di un marketplace di componenti già pronte: https://www.jhipster.tech/#modules E' dotato di uno strumento web per la modellazione dello schema E-R: https://start.jhipster.tech/jdl-studio/ Prerequisiti - Java 8  - Node.js (usare la versione LTS 64-bit) - NPM viene installato con Node.js ma va aggiornato      $ npm install -g npm - Per usare il JHipster Marketplace, installare Yeoman:       $ npm install -g yo Uso base Gli step, presi dal sito ufficiale sono questi: 1. Installare JHipster:       $ npm install -g generator-jhipster Nota: per installare una versione specifica del generator:   $ npm install -g generator-jhipster@6.0.5 2. Crea una nuova directory ed entra dentro questa:   $ mkdir ...