Hitelesítés az MQTT-közvetítővel egyéni webhook-hitelesítéssel

Ez a cikk bemutatja, hogyan lehet hitelesíteni az Azure Event Grid névtereket egy webhook vagy Azure-függvény használatával.

A webhook-hitelesítés lehetővé teszi a külső HTTP-végpontok (webhookok vagy függvények) számára a Message Queuing Telemetry Transport (MQTT) kapcsolatok dinamikus hitelesítését. Ez a módszer a Microsoft Entra ID JSON webes jogkivonatának érvényesítését használja a biztonságos hozzáférés biztosítása érdekében.

Amikor egy ügyfél megpróbál csatlakozni, a közvetítő meghív egy felhasználó által definiált HTTP-végpontot, amely érvényesíti a hitelesítő adatokat, például közös hozzáférésű jogosultságkód-jogkivonatokat, felhasználóneveket és jelszavakat, vagy akár visszavont tanúsítványok listájának ellenőrzését is végrehajtja. A webhook kiértékeli a kérést, és visszaad egy döntést, amely engedélyezi vagy megtagadja a kapcsolatot, valamint az opcionális metaadatokat a részletes engedélyezéshez. Ez a megközelítés támogatja a rugalmas és központosított hitelesítési szabályzatokat a különböző eszközflotta és használati esetek között.

Előfeltételek

  • Event Grid-névtér rendszer által hozzárendelt vagy felhasználó által hozzárendelt felügyelt identitással.
  • Külső webhook vagy Azure-függvény.
  • Az Event Grid névtér felügyelt identitásának hozzáférése engedélyezve van az Azure-függvényhez vagy a webhookhoz.

Magas szintű lépések

Ha egyéni webhook-hitelesítést szeretne használni a névterekhez, kövesse az alábbi lépéseket:

  1. Hozzon létre egy névteret, és konfigurálja annak alerőforrásait.
  2. Felügyelt identitás engedélyezése az Event Grid-névtérben.
  3. Adjon hozzáférést a felügyelt identitásnak az Azure-függvényhez vagy a webhookhoz.
  4. Egyéni webhookbeállítások konfigurálása az Event Grid-névtérben.
  5. Csatlakoztassa az ügyfeleket az Event Grid névtérhez, és hitelesítse magát a webhookon vagy a függvényen keresztül.

Névtér létrehozása és alforrásainak konfigurálása

Névtér létrehozásához és alforrásainak konfigurálásához kövesse a rövid útmutató utasításait: MQTT-üzenetek közzététele és feliratkozás egy Event Grid-névtéren az Azure Portallal. Hagyja ki a tanúsítvány és az ügyfél létrehozásának lépéseit, mert az ügyfélidentitások a megadott jogkivonatból származnak. Az ügyfél jellemzői az ügyfél tokenben található egyedi jogosultságokon alapulnak. Az ügyfélattribútumok az ügyfélcsoport lekérdezésében, a témakörsablon változóiban és az útválasztási bővítés konfigurációjában használatosak.

Felügyelt identitás engedélyezése az Event Grid-névtérben

Ha engedélyezni szeretne egy rendszer által hozzárendelt felügyelt identitást az Event Grid-névtérben, használja a következő parancsot:

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

A rendszer és a felhasználó által hozzárendelt identitások Azure Portallal történő konfigurálásáról további információt az Event Grid-névtér felügyelt identitásának engedélyezése című témakörben talál.

Megvalósítások

1. lehetőség: Webhook az Azure Functions implementálása (Microsoft Entra App)

Azure Functions üzemeltetheti a webhook logikáját a Microsoft.Identity.Web használatával a jogkivonat automatikus érvényesítéséhez. Az Event Grid-hívó jogkivonatok érvényesítéséhez Microsoft Entra alkalmazásregisztrációra van szükség a webhook API-hoz. Az alkalmazásregisztrációnak van egy alkalmazásazonosító URI-ja a tokenek kiállításához. Az ügyféloldal (Event Grid) már rendelkezik felügyelt identitással.

Előnyök:

  • Nincs kezelendő infrastruktúra
  • Beépített hitelesítési segítők (Microsoft.Identity.Web)
  • Tartós, méretezhető, költséghatékony

A függvénynek a következő műveleteket kell végrehajtania:

  • Ellenőrizze a hívó jogkivonatát az Event Grid által kezelt identitás alapján.
  • Hitelesítse az ügyfél JSON webes tokenjét (JWT).
  • Adjon vissza egy engedélyező vagy elutasító JSON-választ.

2. lehetőség: Külső HTTPS-végpont implementálása

Ez az implementáció bármilyen külső HTTPS-végpont lehet (bármilyen felhő, bármely háttérrendszer), amely a Microsoft Entra ID JWT-érvényesítést Microsoft.IdentityModel használja kódtárakkal.

Használjon bármilyen futtatókörnyezetet: .NET, Node.js, Java vagy Python.

Főbb követelmények:

  • A végpontnak HTTPS-nek kell lennie.

  • Validálnia kell a hívó JWT-t.

  • Ellenőriznie kell az eszköz JWT-jét.

  • Az időkorláton belül kell válaszolnia (körülbelül 5 másodperc ajánlott).

    Egyéni webhook-implementációkat bemutató diagram.

A felügyelt identitás megfelelő hozzáférésének biztosítása egy függvényhez vagy webhookhoz

Adja meg az Event Grid-névtér felügyelt identitásának a megfelelő hozzáférést a cél Azure-függvényhez vagy webhookhoz.

Ha egyéni hitelesítést szeretne beállítani egy Azure-függvényhez, kövesse a következő lépéseket.

Microsoft Entra alkalmazás létrehozása

  1. Microsoft Entra-alkalmazás létrehozása a Microsoft Entra-azonosítóban.

  2. Az alkalmazás Áttekintés lapján jegyezze fel az alkalmazás (ügyfél) azonosítójának értékét.

    Képernyőkép egy Microsoft Entra ID-alkalmazás áttekintési oldaláról, amelyen az alkalmazás (ügyfél) azonosítója van kiemelve.

  3. A bal oldali menüben válassza az API-k felfedése lehetőséget. Az alkalmazásazonosító URI-ja mellett válassza a Hozzáadás lehetőséget.

  4. Jegyezze fel az alkalmazásazonosító URI-értékét az Alkalmazásazonosító URI szerkesztése panelen, majd válassza a Mentés lehetőséget.

    A Microsoft Entra alkalmazás URI-ját bemutató képernyőkép.

Hitelesítés beállítása Azure-függvényhez

Ha alapszintű Azure-függvényt hozott létre az Azure Portálon, állítsa be a hitelesítést, és ellenőrizze a felügyelt identitással létrehozott Microsoft Entra-azonosító tokent.

  1. Nyissa meg az Azure Functions-alkalmazást.

  2. A bal oldali menüben válassza a Hitelesítés, majd az Identitásszolgáltató hozzáadása lehetőséget.

    Képernyőkép a Hitelesítési oldalról.

  3. Az Identitásszolgáltató hozzáadása lapon válassza a Microsoftot a legördülő listából.

  4. Az Alkalmazásregisztráció szakaszban adja meg az alábbi tulajdonságok értékeit:

    1. Alkalmazás (ügyfél) azonosítója: Adja meg a Korábban feljegyzett Microsoft Entra alkalmazás ügyfél-azonosítóját.

    2. Kiállító URL-címe: Adja hozzá a kiállító URL-címét az űrlaphoz https://login.microsoftonline.com/<tenantid>/v2.0.

      Az Identitásszolgáltató hozzáadása a Microsofttal identitásszolgáltatóként című képernyőkép.

  5. A Token által engedélyezett célközönségek szakaszban adja meg az engedélyezett célközönségeket. Pontosabban adja meg a korábban feljegyzett Microsoft Entra alkalmazásazonosító URI-ját. A jogkivonat célközönsége az Event Gridből érkező bejövő jogkivonat ellenőrzésére szolgál.

  6. A További ellenőrzések szakaszban kövesse az alábbi lépéseket:

    1. Ügyfélalkalmazás-követelmény esetén válassza az Adott ügyfélalkalmazások Engedélyezett kérései lehetőséget, majd adja meg a korábban feljegyzett alkalmazásazonosítót.

    2. Identitáskövetelmény esetén válassza a Kérések engedélyezése bármely identitásból lehetőséget.

      Képernyőkép, amely bemutatja egy identitásszolgáltató hozzáadását a jogkivonat célközönsége és további ellenőrzések mellett.

  7. Az App Service hitelesítési beállításai szakaszban kövesse az alábbi lépéseket:

    1. A hozzáférés korlátozásához válassza a Hitelesítés megkövetelése lehetőséget.

    2. A nem hitelesített kérések esetén válassza a HTTP 401 jogosulatlan visszaadása lehetőséget.

      Képernyőkép az App Service hitelesítési beállításairól.

  8. Válasszon más beállításokat a megadott követelmények alapján, majd válassza a Hozzáadás lehetőséget.

A Microsoft Entra ID-jogkivonat létrehozása és használata

Most hozza létre és használja a Microsoft Entra ID tokent.

  1. Hozzon létre egy Microsoft Entra-azonosító jogkivonatot a kezelt identitás használatával erőforrásként, az alkalmazásazonosító URI (api://<ClientID>) megadásával.
  2. Ezzel a jogkivonattal meghívhatja az Azure-függvényt a kérés fejlécében.

Egyéni webhook-hitelesítési beállítások konfigurálása az Event Grid-névtérben

Egyéni webhook-hitelesítési beállítások konfigurálása az Event Grid-névtéren az Azure Portal és az Azure CLI használatával. Először létre kell hoznia a névteret, majd frissítenie kell.

Az Azure Portal használata

  1. Nyissa meg az Event Grid-névteret az Azure Portalon.

  2. Az Event Grid Névtér lapján válassza a Bal oldali menü Konfiguráció elemét.

  3. Az Egyéni Webhook-hitelesítés szakaszban adja meg az alábbi tulajdonságok értékeit:

    1. Felügyelt identitás típusa: Válassza ki a hozzárendelt felhasználót.
    2. Webhook URL-címe: Adja meg annak az URL-végpontnak az értékét, amelyben az Event Grid szolgáltatás hitelesített webhook-kérelmeket küld a megadott felügyelt identitás használatával.
    3. Jogkivonat célközönségének URI-ja: Adja meg a Microsoft Entra alkalmazásazonosítójának vagy URI-jának értékét, hogy lekérje a hozzáférési jogkivonatot, amelyet tulajdonosi jogkivonatként szeretne szerepeltetni a kézbesítési kérelmekben.
    4. Microsoft Entra ID bérlőazonosító: Adja meg a Hitelesített webhook-kézbesítés tulajdonosi jogkivonatának beszerzéséhez használt Microsoft Entra-bérlőazonosító értékét.
  4. Válassza az Alkalmazás lehetőséget.

    Az Event Grid-névtér webhook-hitelesítésének konfigurációját bemutató képernyőkép.

Az Azure parancssori felületének használata

Ha a névteret az egyéni webhook-hitelesítési konfigurációval szeretné frissíteni, használja a következő parancsot:

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" 

Cserélje le <NAMESPACE_NAME> és <RESOURCE_GROUP_NAME> a tényleges értékekre. Adja meg az előfizetés, az erőforráscsoport, az identitás, az alkalmazásazonosító, az URL-cím és a bérlőazonosító helykitöltőit. Az Event Grid MQTT-közvetítő webhookalapú hitelesítésének teljesítményének és megbízhatóságának javítása érdekében javasoljuk, hogy engedélyezze a HTTP/2 támogatását a webhook végpontjához.

Webhook API részletei

HTTP-kérés fejlécek

Az Azure Event Grid a következő fejléceket küldi el a kérésben a webhooknak:

Authorization: Bearer <token>

A jogkivonat egy Microsoft Entra-jogkivonat a webhook meghívására konfigurált felügyelt identitáshoz.

Hasznos adatok kérése

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

Terhelési mezők leírásai

szakterület Kötelező/nem kötelező Leírás
clientId Kötelező Ügyfélazonosító az MQTT CONNECT-csomagból.
userName Opcionális Felhasználónév az MQTT CONNECT-csomagból.
password Opcionális Jelszó az MQTT CONNECT-csomagból Base64-kódolásban.
authenticationMethod Opcionális Hitelesítési módszer az MQTT CONNECT-csomagból (csak MQTT5).
authenticationData Opcionális Hitelesítési adatok az MQTT CONNECT-csomagból Base64-kódolásban (csak MQTT5 esetén).
clientCertificate Opcionális Ügyféltanúsítvány Privacy-Enhanced e-mail (PEM) formátumban.
clientCertificateChain Opcionális Az ügyfél által biztosított egyéb tanúsítványok szükségesek ahhoz, hogy létrehozzák a láncot az ügyféltanúsítvány és a Hitelesítésszolgáltató tanúsítványa között.

Választerhelés

Sikeres válasz

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

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

Elutasított válasz

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

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

Hibakódok:

Hitelesítési eredmény Függvény eredménye Event Grid MQTT indokkódja
Kifejezett engedélyezési megtagadás "decision": "deny" Nem engedélyezett
Érvénytelen /lejárt jogkivonat "decision": "deny" Nem engedélyezett
Függvényidőkorlát N/A A kiszolgáló nem érhető el
Függvénykivétel/összeomlás N/A A kiszolgáló nem érhető el
Átmeneti platformhiba N/A A kiszolgáló nem érhető el
Belső közvetítő feldolgozási hibája N/A A kiszolgáló nem érhető el

Válaszmező leírása

szakterület Típus Kötelező, ha Leírás
decision karakterlánc (allow | deny) Mindig kötelező A szolgáltatás által visszaadott hitelesítési döntés. Az engedélyezett értékek a következők: allow vagy deny.
clientAuthenticationName karakterlánc Kötelező, ha decision = allow Az ügyfél identitásneve (például eszközazonosító vagy ügyfélazonosító).
attributes objektum (szótár) Nem kötelező, ha decision = allow További attribútumokat képviselő kulcs-érték párok. Az értékek lehetnek egész szám, sztring vagy sztringek tömbje.
expiration egész szám (Unix időbélyeg, másodperc) Nem kötelező, ha decision = allow Az engedélyezési határozat lejárati ideje Unix időként kifejezve (a korszak óta eltelt másodpercek). Példa: 1713782400.
errorReason karakterlánc Nem kötelező, ha decision = deny A kérés elutasításának okát leíró hibaüzenet. Ez az érték diagnosztikához van naplózva.

Példák támogatott attribútumtípusokra

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

A rendszer minden helyes adattípust (a megfelelő <int32/string/array_of_strings>számot) attribútumként használ. A példában a num_attr_pos, num_attr_neg, str_attrés str_list_attr a jogcímek helyes adattípusokkal rendelkeznek, és attribútumként használatosak.