Eseguire l'autenticazione con spazi dei nomi usando token JSON Web
Questo articolo illustra come eseguire l'autenticazione con lo spazio dei nomi Griglia di eventi di Azure usando token JSON Web.
Il broker MQTT di Griglia di eventi di Azure supporta l'autenticazione JWT personalizzata, che consente ai client di connettersi ed eseguire l'autenticazione con uno spazio dei nomi Griglia di eventi usando token JSON Web rilasciati da qualsiasi provider di identità, a parte Microsoft Entra ID.
Prerequisiti
Per usare l'autenticazione JWT personalizzata per gli spazi dei nomi, è necessario disporre dei prerequisiti seguenti:
- Provider di identità in grado di emettere token Json Web.
- Certificato CA che include le chiavi pubbliche usate per convalidare i token client.
- Account di Azure Key Vault per ospitare il certificato della CA che include le chiavi pubbliche.
Procedura generale
Per usare l'autenticazione JWT personalizzata per gli spazi dei nomi, eseguire i passaggi seguenti:
- Creare uno spazio dei nomi e configurare le relative sotto-risorse.
- Abilitare l'identità gestita nello spazio dei nomi Griglia di eventi.
- Creare un account di Azure Key Vault che ospita il certificato della CA che include le chiavi pubbliche.
- Aggiungere l'assegnazione di ruolo in Azure Key Vault per l'identità gestita dello spazio dei nomi.
- Configurare le impostazioni di autenticazione personalizzate nello spazio dei nomi Griglia di eventi
- I client possono connettersi allo spazio dei nomi Griglia di eventi usando i token forniti dal provider di identità.
Creare uno spazio dei nomi e configurare le relative sotto-risorse
Seguire le istruzioni riportate in Avvio rapido: pubblicare e sottoscrivere messaggi MQTT nello spazio dei nomi Griglia di eventi con il portale di Azure per creare uno spazio dei nomi e configurare le relative sotto-risorse. Ignorare i passaggi di creazione del certificato e del client man mano che le identità client provengono dal token fornito. Gli attributi client sono basati sulle attestazioni personalizzate nel token client. Gli attributi client vengono usati nella query del gruppo client, nelle variabili del modello di argomento e nella configurazione dell'arricchimento del routing.
Abilitare l'identità gestita nello spazio dei nomi Griglia di eventi
Lo spazio dei nomi usa l'identità gestita per accedere all'istanza di Azure Key Vault per ottenere il certificato del server per il dominio personalizzato. Usare il comando seguente per abilitare l'identità gestita assegnata dal sistema nello spazio dei nomi Griglia di eventi:
az eventgrid namespace update --resource-group <resource group name> --name <namespace name> --identity "{type:systemassigned}"
Per informazioni sulla configurazione delle identità assegnate dal sistema e dall'utente tramite il portale di Azure, vedere Abilitare l'identità gestita per uno spazio dei nomi Griglia di eventi.
Creare un account Azure Key Vault e caricare il certificato del server
Usare il comando seguente per creare un account Azure Key Vault:
az keyvault create --name "<your-unique-keyvault-name>" --resource-group "<resource group name>" --location "centraluseaup"
Usare il comando seguente per importare un certificato in Azure Key Vault
az keyvault certificate import --vault-name "<your-key-vault-name>" -n "<cert name>" -f "<path to your certificate pem file> "
Nota
Il certificato deve includere il nome di dominio nel nome alternativo del soggetto per DNS. Per ulteriori informazioni, vedere Esercitazione: Importare un certificato in Azure Key Vault.
Aggiungere l'assegnazione di ruolo in Azure Key Vault per l'identità gestita dello spazio dei nomi
È necessario fornire l'accesso allo spazio dei nomi per accedere all'account Azure Key Vault attenendosi alla procedura seguente:
Ottenere l'ID dell'entità di sicurezza dell'identità gestita del sistema dello spazio dei nomi Griglia di eventi usando il comando seguente
$principalId=(az eventgrid namespace show --resource-group <resource group name> --name <namespace name> --query identity.principalId -o tsv)
Ottenere l'ID della risorsa di Azure Key Vault.
$keyVaultResourceId=(az keyvault show --resource-group <resource group name> --name <your key vault name> --query id -o tsv)
Aggiungere l'assegnazione di ruolo in Key Vault per l'identità gestita dello spazio dei nomi.
az role assignment create --role "Key Vault Certificate User" --assignee $principalId --scope $keyVaultResourceId
Per ulteriori informazioni sull'accesso a Key Vault e sull'esperienza con il portale, vedere Fornire l'accesso a chiavi, certificati e segreti di Key Vault con il controllo degli accessi in base al ruolo di Azure.
Configurare le impostazioni di autenticazione personalizzate nello spazio dei nomi Griglia di eventi
In questo passaggio si configurano le impostazioni di autenticazione personalizzate nello spazio dei nomi Griglia di eventi usando il portale di Azure e l'interfaccia della riga di comando di Azure. È prima necessario creare lo spazio dei nomi e quindi aggiornarlo seguendo questa procedura.
Usare il portale di Azure
Passare allo spazio dei nomi Griglia di eventi nel portale di Azure.
Nella pagina Spazio dei nomi Griglia di eventi, selezionare Configurazione nel menu a sinistra.
Nella sezione Autenticazione JWT personalizzata specificare i valori per le proprietà seguenti:
Selezionare Abilita autenticazione JWT personalizzata.
Autorità di certificazione token: immettere il valore delle attestazioni dell'autorità di certificazione dei token JWT, presentate dai client MQTT.
Selezionare Aggiungi certificato di autorità di certificazione
Nella nuova pagina specificare i valori per le proprietà seguenti.
URL certificato: identificatore del certificato del server dell'autorità di certificazione in Azure Key Vault creato. È possibile scegliere Seleziona un certificato usando un insieme di credenziali delle chiavi per selezionare il certificato e l'insieme di credenziali delle chiavi dalle sottoscrizioni.
Identità: identità usata per l'autenticazione con Key Vault per accedere al certificato dell'autorità di certificazione creato.
Selezionare Aggiungi.
Una volta tornai alla pagina Configurazione selezionare Applica.
Nota
È possibile aggiungere fino a due certificati
iss
a scopo di rotazione di certificati/chiavi.
Utilizzare l'interfaccia della riga di comando di Azure
Usare il comando seguente per aggiornare lo spazio dei nomi con la configurazione dell'autenticazione JWT personalizzata.
az resource update --resource-type Microsoft.EventGrid/namespaces --api-version 2024-06-01-preview --ids /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/dummy-cd-test/providers/Microsoft.EventGrid/namespaces/dummy-cd-test2 --set properties.topicSpacesConfiguration.clientAuthentication='{\"customJwtAuthentication\":{\"tokenIssuer\":\"dmpypin-issuer\",\"issuerCertificates\":[{\"certificateUrl\":\"https://dummyCert-cd-test.vault.azure.net/certificates/dummy-cd-test/4f844b284afd487e9bba0831191087br1\",\"identity\":{\"type\":\"SystemAssigned\"}}]}}'
Formato del token JSON Web
I token JSON Web sono suddivisi nelle sezioni intestazione JWT e payload JWT.
Intestazione JWT
L'intestazione deve contenere almeno i campi typ
e alg
. typ
deve essere sempre JWS
e alg
deve essere sempre RS256
. L'intestazione del token deve essere la seguente:
{
"typ": "JWT",
"alg": "RS256"
}
Payload JWT
Griglia di eventi richiede le attestazioni seguenti: iss
, sub
, aud
, exp
, nbf
.
Nome | Descrizione |
---|---|
iss |
Autorità emittente. Il valore in JWT deve corrispondere all'autorità di certificazione nella configurazione dello spazio dei nomi Griglia di eventi per l'autenticazione JWT personalizzata. |
sub |
Oggetto. Il valore viene usato come nome dell'identità di autenticazione. |
aud |
Destinatari. Il valore può essere una stringa o un array di stringhe. Il valore deve contenere il nome host e/o il dominio personalizzato standard dello spazio dei nomi Griglia di eventi (se configurato). I destinatari possono contenere altre stringhe, ma è necessario che almeno una di queste stringhe sia un nome host standard di Griglia di eventi o un dominio personalizzato per questo spazio dei nomi. |
exp |
Expiration. Tempo Unix alla scadenza di JWT. |
nbf |
Non prima. Tempo unità in cui il token JWT diventa valido. |
Griglia di eventi esegue il mapping di tutte le attestazioni agli attributi client se hanno uno dei tipi seguenti: int32
, string
, array of strings
. Le attestazioni standard iss
, sub
, aud
,exp
e nbf
vengono escluse dagli attributi client. Nell'esempio JWT seguente vengono convertite solo tre attestazioni in attributi client, num_attr
, str_attr
, str_list_attr
, perché hanno tipi corretti int32
, string
e array of strings
. incorrect_attr_1
, incorrect_attr_2
, incorrect_attr_3
non vengono convertiti in attributi client, perché hanno tipi errati: float
, array of integers
, object
.
{
"iss": "correct_issuer",
"sub": "d1",
"aud": "testns.mqtt-broker-int.azure.net",
"exp": 1712876224,
"nbf": 1712869024,
"num_attr": 1,
"str_attr": "some string",
"str_list_attr": [
"string 1",
"string 2"
],
"incorrect_attr_1": 1.23,
"incorrect_attr_2": [
1,
2,
3
],
"incorrect_attr_3": {
"field": "value"
}
}