In un articolo precedente abbiamo visto Arricchire token JWT emessi da Azure Active Directory B2C.
In quell’articolo abbiamo parlato di come sia possibile aggiungere ad un JWT informazioni esterne a Microsoft Graph mediante l’uso di una Logic App ed un Blob Storage.
In questo invece vedremo come sia possibile creare una soluzioni che integri Azure Active Directory B2C.
Seguendo la traccia di quanto trattato nel precedente articolo vedremo come salvare su Blob Storage dati fittizi alla registrazione di un utente.
Note
Nel resto dell’articolo ci sono riferimenti a risorse e concetti trattati nel precedente articolo al quale si rimanda.
Panoramica della soluzione.
La soluzione è cosi composta:
read-customer-details-identity-la
: rappresenta l’api il cui scopo è reperire il contenuto del blob dacustomersstgacc
(lo storage account)customer-register-tpc
: è il topic nel quale sono collezionati gli eventi di creazione di un nuovo utentecustomer-identity-details-filler-la
: rappresenta l’api al quale spetta l’onere di generare dati fittizi che poi saranno salvati all’interno di un blob sullocustomersstgacc
contoso-b2c
: è il servizio di gestione degli accessi e delle identità offerto da Azure
Introduzione ad Azure Event Grid.
In Azure esiste un’implementazione del pattern publish/subscribe concepita per agevolare l’integrazione e la gestione delle risorse mediante un paradigma di sviluppo ad eventi.
Mediante Event Grid sarà quindi possibile sottoscriversi a sorgenti di messaggi built-in attraverso una serie di gestori.
Qual’ora questo non fosse sufficiente è comunque possibile creare dei topic personalizzati ai quali sarà possibile sottoscriversi per riceverne gli eventi.
Creazione di un topic personalizzato.
Per la creazione di un topic è possibile fare riferimento a questa guida.
Una scelta da fare al momento della creazione del topic riguarda lo schema del contenuto della richiesta HTTP utilizzato. Gli schemi supportati al momento sono:
Event Grid Schema
Cloud Event Schema
Custom Input Schema
, questo schema richiederà la creazione di un’associazione fra le proprietà dell’oggetto in ingresso e quelle richieste dalloEvent Grid Schema
.
Il messaggio usato in questo caso ha la seguente struttura
|
|
Emissione dell’evento di registrazione.
L’invio degli eventi verso il topic avviene utilizzando un RESTful technical profile
.
|
|
Questo frammento di markup tradotto in comando curl
, per maggiore esplicabilità, risulterebbe cosi:
|
|
dove i requisiti di autenticazione vengono soddisfatti dal metadato AuthenticationType
al quale viene associata la chiave crittografica aeg-sas-key
il cui valore viene recuperato dalla chiave B2C_1A_CustomerRegisteredTopicSas
presente nella collezione delle chiavi dei criteri.
TL;DR
La scelta dello schema del topic in questo esempio è stata guidata dalle limitazioni al momento imposte dal profilo tecnico RESTful riguardo alle possibilità di costruzione della richiesta HTTP, infatti per una combinazione di criteri non risulta possibile passare informazioni nelle intestazioni e nel corpo della richiesta allo stesso tempo.
Ciò rende impossibile inviare verso un topic schemi di tipo Cloud Event
in quanto il protocollo, nella versione 1.0 richiede la presenza di un’intestazione obbligatoria.
Ben più complessa è la creazione del corpo della richiesta per la quale risultano necessario:
- utilizzare le
InputClaimsTransformation
- aggiungere due attestazioni all’interno del bagaglio
userRegisterEvent
esystemDateTime
entrambe di tipo stringa.
Infine il profilo tecnico è stato aggiunto fra i profili tecnici di validazione di LocalAccountSignUpWithLogonEmail
in modo tale che l’evento venga emesso solamente in fase di registrazione di un’utente.
Utilizzo delle trasformazioni delle attestazioni.
Durante la creazione di criteri personalizzati potremmo avere la necessità di eseguire calcoli, come ad esempio il numero di tentativi di autenticazione, che seppur molto semplici risulterebbero impossibili senza l’esecuzioni di funzioni.
Questo requisito trova espressività tramite le ClaimsTransformation
il cui riferimento delle trasformazioni delle attestazioni contiene la lista completa delle trasformazioni utilizabili.
Nell’esempio sono stati utilizzati i metodi GetCurrentDateTime
e GenerateJson
GetSystemDateTime
ha lo scopo di valorizzare l’attestazione systemDateTime
|
|
GenerateRegistrationEventRequest
ha invece l’onere di costruire il JSON e valorizzare l’attestazione userRegisterEvent
.
Conclusioni.
In questo articolo abbiamo visto come mediante Identity Experience Framework sia possibile integrare un tenant B2C con la nostra infrastruttura ed aprire eventuali scenari di sviluppo interessanti.
Per farlo abbiamo toccato Azure Event Grid e come creare un Event Grid Topic.
Infine come sia possibile manipolare delle attestazioni ed utilizzarle all’interno dei profili tecnici.
Se foste interessati all’esempio completo lo potrete trovare al seguente indirizzo https://github.com/binick/samples/tree/master/src/enrich-a-jwt-token-with-ief.