Ověřte se u zprostředkovatele MQTT prostřednictvím vlastního webhookového ověřování.

V tomto článku se dozvíte, jak se ověřovat pomocí namespaces Azure Event Grid s použitím webhooku nebo Azure Function.

Ověřování webhooku umožňuje externím koncovým bodům HTTP (webhookům nebo funkcím) dynamicky ověřovat připojení protokolu Message Queuing Telemetry Transport (MQTT). Tato metoda používá ověřování webového tokenu JSON v Microsoft Entra ID k zajištění zabezpečeného přístupu.

Když se klient pokusí připojit, zprostředkovatel vyvolá uživatelem definovaný koncový bod HTTP, který ověřuje přihlašovací údaje, jako jsou tokeny sdíleného přístupového podpisu, uživatelská jména a hesla, nebo dokonce provádí kontroly seznamu odvolaných certifikátů. Webhook vyhodnocuje požadavek a vrátí rozhodnutí o povolení nebo zamítnutí připojení spolu s volitelnými metadaty pro jemně odstupňovanou autorizaci. Tento přístup podporuje flexibilní a centralizované zásady ověřování napříč různými skupinami zařízení a případy použití.

Požadavky

  • Obor názvů Event Gridu, který má buď identitu spravovanou systémem, nebo identitu spravovanou uživatelem.
  • Externí webhook nebo funkce Azure
  • Přístup byl udělen spravované identitě oboru názvů služby Event Grid pro funkci Azure nebo webhook.

Základní kroky

Pokud chcete pro obory názvů použít vlastní ověřování webhooku, postupujte takto:

  1. Vytvořte obor názvů a nakonfigurujte jeho dílčí zdroje.
  2. Povolte spravovanou identitu v oboru názvů služby Event Grid.
  3. Udělte spravované identitě přístup k funkci Azure nebo webhooku.
  4. Nakonfigurujte nastavení vlastního webhooku v oboru názvů Event Grid.
  5. Připojte své klienty k Event Grid názvovému prostoru a získejte ověření pomocí webhooku nebo funkce.

Vytvořte jmenný prostor a nakonfigurujte jeho dílčí zdroje

Pokud chcete vytvořit obor názvů a nakonfigurovat jeho dílčí zdroje, postupujte podle pokynů v rychlém startu: Publikování a přihlášení k odběru zpráv MQTT v oboru názvů Event Gridu pomocí webu Azure Portal. Přeskočte kroky k vytvoření certifikátu a klienta, protože identity klientů pocházejí z poskytnutého tokenu. Atributy klienta jsou založené na specifických tvrzeních v tokenu klienta. Atributy klienta se používají v dotazu skupiny klientů, proměnných šablon tématu a konfiguraci rozšiřování směrování.

Povolte spravovanou identitu ve vaší oblasti názvů Event Grid

Pokud chcete ve svém oboru názvů Event Gridu povolit spravovanou identitu přiřazenou systémem, použijte následující příkaz:

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

Informace o konfiguraci systémových a uživatelem přiřazených identit pomocí webu Azure Portal najdete v tématu Povolení spravované identity pro obor názvů služby Event Grid.

Implementace

Možnost 1: Webhook prostřednictvím implementace Azure Functions (Aplikace Microsoft Entra)

Azure Functions může logiku webhooku hostovat pomocí Microsoft.Identity.Web k automatickému ověření tokenu. K ověření tokenů volajícího služby Event Grid potřebujete registraci aplikace Microsoft Entra pro rozhraní API webhooku. Registrace aplikace má URI ID aplikace pro vystavování tokenů. Na straně klienta (Event Grid) už je spravovaná identita.

Výhody:

  • Žádná infrastruktura ke správě
  • Integrované ověřovací nástroje (Microsoft.Identity.Web)
  • Odolná, škálovatelná a nákladově efektivní

Funkce musí provádět následující operace:

  • Ověřte token volajícího ze spravované identity Event Gridu.
  • Ověřte webový token JSON klienta (JWT).
  • Vrátí odpověď JSON s povolením nebo zamítnutím.

Možnost 2: Implementace externího koncového bodu HTTPS

Tato implementace může být libovolným externím koncovým bodem HTTPS (libovolný cloud, libovolné backend řešení), využívající knihovny Microsoft.IdentityModel pro ověřování JWT pomocí Microsoft Entra ID.

Použijte libovolný modul runtime: .NET, Node.js, Java nebo Python.

Klíčové požadavky:

  • Koncový bod musí být HTTPS.

  • Musí ověřit JWT volajícího.

  • Musí ověřit JWT zařízení.

  • Musí reagovat během časového limitu (doporučuje se přibližně 5 sekund).

    Diagram znázorňující vlastní implementace webhooků

Udělení vhodného přístupu spravované identity k funkci nebo webhooku

Udělte spravované identitě vašeho oboru názvů Event Gridu odpovídající přístupová práva k cílové funkci Azure nebo webhooku.

Pokud chcete nastavit vlastní ověřování pro funkci Azure, postupujte podle dalších kroků.

Vytvoření aplikace Microsoft Entra

  1. Vytvořte aplikaci Microsoft Entra v Microsoft Entra ID.

  2. Na stránce Přehled aplikace si poznamenejte hodnotu ID aplikace (klienta).

    Snímek obrazovky znázorňující stránku Přehled aplikace Microsoft Entra ID se zvýrazněným ID aplikace (klienta)

  3. V nabídce vlevo vyberte Zveřejnit rozhraní API. Vedle identifikátoru URI ID aplikace vyberte Přidat.

  4. Poznamenejte si hodnotu identifikátoru URI ID aplikace v podokně Upravit identifikátor URI ID aplikace a pak vyberte Uložit.

    Snímek obrazovky znázorňující identifikátor URI ID aplikace Microsoft Entra

Nastavení ověřování pro funkci Azure

Pokud máte vytvořenou základní funkci Azure z webu Azure Portal, nastavte ověřování a ověřte token ID Microsoft Entra, který byl vytvořen pomocí spravované identity.

  1. Přejděte do aplikace Azure Functions.

  2. V nabídce vlevo vyberte Ověřování a pak vyberte Přidat zprostředkovatele identity.

    Snímek obrazovky se stránkou Ověřování

  3. Na stránce Přidat zprostředkovatele identity vyberte v rozevíracím seznamu Microsoft.

  4. V části Registrace aplikace zadejte hodnoty následujících vlastností:

    1. ID aplikace (klienta): Zadejte ID klienta aplikace Microsoft Entra, kterou jste si poznamenali dříve.

    2. Adresa URL vystavitele: Přidejte adresu URL vystavitele ve formuláři https://login.microsoftonline.com/<tenantid>/v2.0.

      Snímek obrazovky znázorňující přidání zprostředkovatele identity s Microsoftem jako zprostředkovatele identity

  5. V části Cílové skupiny s povolenými tokeny zadejte povolené cílové skupiny tokenů. Pokud chcete být konkrétní, zadejte identifikátor URI ID aplikace Microsoft Entra, kterou jste si poznamenali dříve. Cílová skupina tokenů slouží k ověření příchozího tokenu z Event Gridu.

  6. V části Další kontroly postupujte takto:

    1. V případě požadavku klientské aplikace vyberte Povolené požadavky z konkrétních klientských aplikací a zadejte ID aplikace, které jste si poznamenali dříve.

    2. V případě požadavku na identitu vyberte Povolit požadavky z jakékoli identity.

      Snímek obrazovky znázorňující přidání zprostředkovatele identity s cílovou skupinou tokenů a dalšími kontrolami

  7. V části Nastavení ověřování služby App Service postupujte takto:

    1. Chcete-li omezit přístup, vyberte Vyžadovat ověření.

    2. V případě neověřených požadavků vyberte Vrátit http 401 Neautorizováno.

      Snímek obrazovky znázorňující nastavení ověřování ve službě App Service

  8. Zvolte další nastavení podle vašich konkrétních požadavků a pak vyberte Přidat.

Generování a použití tokenu Microsoft Entra ID

Teď vygenerujte a používejte token MICROSOFT Entra ID.

  1. Vygenerujte token Microsoft Entra ID s použitím spravované identity a identifikátoru URI aplikace (api://<ClientID>) jako prostředku.
  2. Tento token použijte k vyvolání funkce Azure tak, že ji zahrnete do hlavičky požadavku.

Konfigurace přizpůsobených nastavení ověřování webhooku v oboru názvů Event Grid.

Pomocí Azure Portal a Azure CLI nakonfigurujte vlastní nastavení ověřování webhooku v oboru názvů Event Grid. Nejprve vytvoříte obor názvů a pak ho aktualizujete.

Použití portálu Azure Portal

  1. V Azure portálu přejděte do svého oboru názvů Event Grid.

  2. Na stránce Obor názvů Event Grid vyberte v levé nabídce Konfigurace.

  3. V části Vlastní ověřování webhooku zadejte hodnoty těchto vlastností:

    1. Typ spravované identity: Vyberte přiřazeného uživatele.
    2. Adresa URL webhooku: Zadejte hodnotu koncového bodu adresy URL, kde služba Event Grid odesílá ověřené požadavky webhooku pomocí zadané spravované identity.
    3. Identifikátor URI cílové skupiny tokenů: Zadejte hodnotu ID aplikace Microsoft Entra nebo identifikátoru URI pro získání přístupového tokenu, který se má zahrnout jako nosný token v žádostech o doručení.
    4. ID tenanta Microsoft Entra: Zadejte hodnotu ID tenanta Microsoft Entra použité k získání nosného tokenu pro ověřené doručování webhooku.
  4. Vyberte a použijte.

    Snímek obrazovky znázorňující konfiguraci ověřování webhooku pro obor názvů služby Event Grid

Použití Azure CLI

Pokud chcete aktualizovat obor názvů pomocí vlastní konfigurace ověřování webhooku, použijte následující příkaz:

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" 

Nahraďte <NAMESPACE_NAME> a <RESOURCE_GROUP_NAME> nahraďte skutečnými hodnotami. Vyplňte pole v předplatném, skupině prostředků, identitě, ID aplikace, URL adrese a ID tenanta. Pokud chcete zvýšit výkon a spolehlivost ověřování založeného na webhooku pro zprostředkovatele Event Grid MQTT, doporučujeme povolit podporu PROTOKOLU HTTP/2 pro koncový bod webhooku.

Podrobnosti rozhraní API webhooku

Hlavičky žádosti

Azure Event Grid odešle do webhooku následující hlavičky v požadavku:

Authorization: Bearer <token>

Token Microsoft Entra je určen pro spravovanou identitu, která byla nakonfigurována k volání webhooku.

Obsah žádosti

{
    "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>"
}

Popisy polí datového obsahu

Pole Povinné nebo volitelné Popis
clientId Povinné ID klienta z paketu MQTT CONNECT
userName Volitelný Uživatelské jméno z paketu MQTT CONNECT
password Volitelný Heslo z paketu MQTT CONNECT v kódování Base64
authenticationMethod Volitelný Metoda ověřování z paketu MQTT CONNECT (pouze MQTT5).
authenticationData Volitelný Ověřovací data z paketu MQTT CONNECT v kódování Base64 (pouze MQTT5).
clientCertificate Volitelný Klientský certifikát ve formátu Privacy-Enhanced Mail (PEM).
clientCertificateChain Volitelný Další certifikáty poskytované klientem potřebné k sestavení řetězu z klientského certifikátu k certifikátu certifikační autority.

Odpověďové zatížení

Úspěšná odpověď

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

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

Odepřená odpověď

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

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

Kódy chyb:

Výsledek ověřování Odpověď funkce MQTT důvodový kód Event Grid
Explicitní odepření autorizace "decision": "deny" Neautorizováno
Neplatný token nebo token s vypršenou platností "decision": "deny" Neautorizováno
Časový limit funkce N/A Server není k dispozici
Výjimka funkce / chyba N/A Server není k dispozici
Přechodné selhání platformy N/A Server není k dispozici
Vnitřní chyba zpracování brokeru N/A Server není k dispozici

Popisy polí odpovědi

Pole Typ Požadováno v případě, že Popis
decision string (allow | deny) Vždy se vyžaduje Rozhodnutí o ověřování vrácené službou Povolené hodnoty jsou allow nebo deny.
clientAuthenticationName řetězec Požadováno v případě, že decision = allow Název identity klienta (například ID zařízení nebo ID klienta).
attributes objekt (slovník) Volitelné, pokud decision = allow Páry klíč-hodnota představující další atributy. Hodnoty můžou být int, string nebo pole řetězců.
expiration integer (unixové časové razítko, sekundy) Volitelné, pokud decision = allow Doba vypršení platnosti rozhodnutí o autorizaci vyjádřená jako unixový čas (sekundy od epochy). Příklad: 1713782400.
errorReason řetězec Volitelné, pokud decision = deny Chybová zpráva popisující, proč byl požadavek odepřen. Tato hodnota se protokoluje pro diagnostiku.

Příklady podporovaných typů atributů

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

Všechny správné datové typy (číslo, které se hodí <int32/string/array_of_strings>) se používají jako atributy. V příkladu num_attr_pos, num_attr_neg, str_attr a str_list_attr mají nároky správné datové typy a jsou použity jako atributy.