Condividi tramite


Eseguire l'autenticazione con il broker MQTT usando l'autenticazione webhook personalizzata

Questo articolo illustra come eseguire l'autenticazione con gli spazi dei nomi di Griglia di eventi di Azure usando un webhook o una funzione di Azure.

L'autenticazione webhook consente agli endpoint HTTP esterni (webhook o funzioni) di autenticare dinamicamente le connessioni MQTT (Message Queuing Telemetry Transport). Questo metodo usa la convalida del token Web JSON di Microsoft Entra ID per garantire l'accesso sicuro.

Quando un client tenta di connettersi, il broker richiama un endpoint HTTP definito dall'utente che convalida le credenziali, ad esempio token di firma di accesso condiviso (SAS), nomi utente e password o esegue anche controlli dell'elenco di revoche di certificati (CRL). Il webhook valuta la richiesta e restituisce una decisione per consentire o negare la connessione, insieme ai metadati facoltativi per l'autorizzazione con granularità fine. Questo approccio supporta criteri di autenticazione flessibili e centralizzati in diverse flotta di dispositivi e casi d'uso.

Prerequisiti

  • Uno spazio dei nomi di Griglia di eventi con un'identità gestita assegnata dal sistema o assegnata dall'utente.
  • Un webhook esterno o una funzione di Azure.
  • Accesso concesso all'identità gestita dello spazio dei nomi di Griglia di eventi alla funzione di Azure o al webhook.

Fasi ad alto livello

Per usare l'autenticazione webhook personalizzata per i namespace, seguire questa procedura:

  1. Creare uno spazio dei nomi e configurare le relative sotto-risorse.
  2. Abilitare un'identità gestita nello spazio dei nomi di Griglia di eventi.
  3. Concedere all'identità gestita l'accesso alla funzione di Azure o al webhook.
  4. Configurare impostazioni webhook personalizzate nello spazio dei nomi di Griglia di eventi.
  5. Connettere i clienti allo spazio dei nomi di Griglia di eventi e ottenere l'autenticazione tramite il webhook o la funzione.

Creare uno spazio dei nomi e configurare le relative sotto-risorse

Per creare uno spazio dei nomi e configurare le relative risorse secondarie, seguire le istruzioni riportate in Avvio rapido: Pubblicare e sottoscrivere messaggi MQTT in uno spazio dei nomi di Griglia di eventi con il portale di Azure. Ignorare i passaggi per creare un certificato e un client perché le identità client provengono dal token specificato. 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 un'identità gestita nello spazio dei nomi di Griglia di eventi

Per abilitare un'identità gestita assegnata dal sistema nello spazio dei nomi di Griglia di eventi, usare il comando seguente:

az eventgrid namespace update --resource-group <resource group name> --name <namespace name> --identity "{type:systemassigned}" 

Per informazioni su come configurare le identità assegnate dal sistema e dall'utente tramite il portale di Azure, vedere Abilitare l'identità gestita per uno spazio dei nomi di Griglia di eventi.

Concedere all'identità gestita l'accesso appropriato a una funzione o a un webhook

Concedi all'identità gestita del namespace di Event Grid l'accesso appropriato alla funzione di Azure di destinazione o al webhook.

Per configurare l'autenticazione personalizzata per una funzione di Azure, seguire i passaggi successivi.

Creare un'app Microsoft Entra

  1. Creare un'app Microsoft Entra in Microsoft Entra ID.

  2. Nella pagina Panoramica dell'app prendere nota del valore ID applicazione (client).

    Screenshot che mostra la pagina di panoramica di un'app Microsoft Entra ID con l'ID applicazione (client) evidenziato.

  3. Nel menu a sinistra, selezionare Esponi un'API. Accanto a URI dell'ID applicazione selezionare Aggiungi.

  4. Prendere nota del valore URI ID applicazione nel riquadro Modifica URI ID applicazione e quindi selezionare Salva.

    Screenshot che mostra l'URI ID applicazione dell'app Microsoft Entra.

Configurare l'autenticazione per una funzione di Azure

Se si dispone di una funzione di Azure di base creata dal portale di Azure, configurare l'autenticazione e convalidare il token ID Microsoft Entra creato usando un'identità gestita.

  1. Passare all'app Funzioni di Azure.

  2. Nel menu a sinistra selezionare Autenticazione e quindi Aggiungi provider di identità.

    Screenshot che mostra la pagina di autenticazione.

  3. Nella pagina Aggiungi un provider di identità, per Profider di identità selezionare Microsoft nell'elenco a discesa.

  4. Nella sezione Registrazione app, specificare i valori per le proprietà seguenti:

    1. ID applicazione (client): immettere l'ID client dell'app Microsoft Entra annotato in precedenza.

    2. URL emittente: aggiungere l'URL dell'emittente nel formato https://login.microsoftonline.com/<tenantid>/v2.0.

      Screenshot che mostra l'opzione Aggiungi un provider di identità con Microsoft come provider di identità.

  5. Per Gruppi di destinatari token consentiti, aggiungere il valore URI ID applicazione dell'app Microsoft Entra annotato in precedenza.

  6. Nella sezione Controlli aggiuntivi, per Sviluppo di applicazioni client selezionare Consenti richieste da applicazioni client specifiche.

  7. Nel riquadro Applicazioni client consentite, immettere l'ID client dell'identità gestita assegnata dal sistema usata per generare il token. È possibile trovare questo ID nell'app aziendale della risorsa Microsoft Entra ID.

  8. Scegliere altre impostazioni in base ai requisiti specifici e quindi selezionare Aggiungi.

A questo momento, generare e usare il token ID Microsoft Entra.

  1. Generare un token Microsoft Entra ID usando l'identità gestita con l'URI ID applicazione come risorse.
  2. Usare questo token per richiamare la funzione di Azure includendola nell'intestazione della richiesta.

Configurare le impostazioni di autenticazione webhook personalizzate nel namespace Event Grid

Configurare impostazioni di autenticazione webhook personalizzate nello spazio dei nomi di Griglia di eventi usando il portale di Azure e l'interfaccia della riga di comando di Azure. Creare prima lo spazio dei nomi e quindi aggiornarlo.

Usare il portale di Azure

  1. Passare allo spazio dei nomi di Griglia di eventi nel portale di Azure.

  2. Nella pagina Spazio dei nomi Griglia di eventi, selezionare Configurazione nel menu a sinistra.

  3. Nella sezione Autenticazione webhook personalizzata, specificare i valori per le proprietà seguenti:

    1. Tipo di identità gestita: selezionare Assegnata dall'utente.
    2. URL webhook: immettere il valore dell'endpoint URL in cui il servizio Griglia di eventi invia richieste webhook autenticate usando l'identità gestita specificata.
    3. URI gruppo di destinatari token: immettere l'URI o il valore dell'ID applicazione Microsoft Entra per ottenere il token di accesso da includere come token di connessione nelle richieste di recapito.
    4. ID tenant Microsoft Entra ID: immettere il valore dell'ID tenant Microsoft Entra usato per acquisire il token di connessione per il recapito del webhook autenticato.
  4. Selezionare Applica.

    Screenshot che mostra la configurazione dell'autenticazione webhook per uno spazio dei nomi di Griglia di eventi.

Usare l'interfaccia della riga di comando di Azure

Per aggiornare lo spazio dei nomi con la configurazione di autenticazione webhook personalizzata, usare il comando seguente:

az eventgrid namespace update \ 
    --resource-group <resource-group-name> \ 
    --name <namespace-name> \ 
    --api-version 2025-04-01-preview \ 
    --identity-type UserAssigned \ 
    --identity-user-assigned-identities "/subscriptions/XXXXXXXXXXX/resourcegroups/XXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/XXXXXXXXXXX={}" \ 
    --set properties.isZoneRedundant=true \ 
        properties.topicSpacesConfiguration.state=Enabled \ 
        properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.identity.type=UserAssigned \ 
        properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.identity.userAssignedIdentity="/subscriptions/XXXXXXXXXXX/resourcegroups/XXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/XXXXXXXXXXX" \ 
        properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.endpointUrl="https://XXXXXXXXXXX" \ 
        properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.azureActiveDirectoryApplicationIdOrUri="api://XXXXXXXXXXX/.default" \ 
        properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.azureActiveDirectoryTenantId="XXXXXXXXXXX" 

Sostituire <NAMESPACE_NAME> e <RESOURCE_GROUP_NAME> con i valori effettivi. Compilare i segnaposto nell'abbonamento, nel gruppo di risorse, nell'identità, nell'ID app, nell'URL e nell'ID tenant. Per migliorare le prestazioni e l'affidabilità dell'autenticazione basata su webhook per il broker MQTT di Griglia di eventi, si consiglia vivamente di abilitare il supporto HTTP/2 per l'endpoint del webhook.

Dettagli dell'API webhook

Intestazioni della richiesta

Autorizzazione: token di connessione

Il token è un token Microsoft Entra per l'identità gestita configurata per chiamare il webhook.

Payload della richiesta

{
    "clientId": "<string>",
    "userName": "<string>",
    "password": "<base64 encoded bytes>",
    "authenticationMethod": "<string>",
    "authenticationData": "<base64 encoded bytes>",
    "clientCertificate": "<certificate in PEM format>",
    "clientCertificateChain": "<certificates from chain in PEM format>"
}

Descrizioni dei campi del payload

Campo Obbligatorio/Facoltativo Descrizione
clientId Obbligatorio ID client del pacchetto MQTT CONNECT.
userName Opzionale Nome utente del pacchetto MQTT CONNECT.
password Opzionale Password dal pacchetto MQTT CONNECT nella codifica Base64.
authenticationMethod Opzionale Metodo di autenticazione dal pacchetto MQTT CONNECT (solo MQTT5).
authenticationData Opzionale Dati di autenticazione del pacchetto MQTT CONNECT nella codifica Base64 (solo MQTT5).
clientCertificate Opzionale Certificato client in formato PEM.
clientCertificateChain Opzionale Altri certificati forniti dal client necessari per compilare la catena dal certificato client al certificato dell'autorità di certificazione.
userProperties Opzionale Proprietà utente del pacchetto CONNECT (solo MQTT5).

Carico della risposta

Risposta riuscita

HTTP/1.1 200 OK 
Content-Type: application/json 

{ 
    "decision": "allow", 
    "clientAuthenticationName": "<string>", 
    "attributes": { 
        "attr": "<int/string/array_of_strings>", 
        ... 
    }, 
    "expiration": "<unix time format>" 
} 

Risposta negata

HTTP/1.1 400 Bad Request 
Content-Type: application/json 

{ 
    "decision": "deny", 
    "errorReason": "<string>" 
}

Descrizioni dei campi di risposta

Campo Descrizione
decision (obbligatorio) La decisione di autenticazione è allow o deny.
clientAuthenticationName Nome dell'autenticazione del client (nome identità) Obbligatorio quando decision è impostato su allow.
attributes Dizionario con attributi. La chiave è il nome dell'attributo e il valore è int/string/array. Facoltativo quando decision è impostato su allow.
expiration Data di scadenza in formato ora Unix. Facoltativo quando decision è impostato su allow.
errorReason Messaggio di errore se decision è impostato su deny. Questo errore viene registrato. Facoltativo quando decision è impostato su deny.

Esempi di tipi di attributo supportati

"num_attr_pos": 1, 
"num_attr_neg": -1, 
"str_attr": "str_value", 
"str_list_attr": [ 
    "str_value_1", 
    "str_value_2" 
] 

Tutti i tipi di dati corretti (numero adatto a <int32/string/array_of_strings>) vengono usati come attributi. Nell'esempio, le attestazioni num_attr_pos, num_attr_neg, str_attr e str_list_attr hanno tipi di dati corretti e vengono usate come attributi.