Delen via


Verifiëren met naamruimten met behulp van JSON-webtokens

In dit artikel wordt beschreven hoe u verifieert met azure Event Grid-naamruimte met behulp van JSON-webtokens.

De MQTT-broker van Azure Event Grid ondersteunt aangepaste JWT-verificatie, waarmee clients verbinding kunnen maken en verifiëren met een Event Grid-naamruimte met behulp van JSON-webtokens die worden uitgegeven door een id-provider, afgezien van Microsoft Entra-id.

Vereisten

Als u aangepaste JWT-verificatie voor naamruimten wilt gebruiken, moet u beschikken over de volgende vereisten:

  • Id-provider die Json-webtokens kan uitgeven.
  • CA-certificaat dat uw openbare sleutels bevat die worden gebruikt om de clienttokens te valideren.
  • Azure Key Vault-account voor het hosten van het CA-certificaat dat uw openbare sleutels bevat.

Stappen op hoog niveau

Als u aangepaste JWT-verificatie voor naamruimten wilt gebruiken, voert u de volgende stappen uit:

  1. Maak een naamruimte en configureer de bijbehorende subresources.
  2. Schakel beheerde identiteit in uw Event Grid-naamruimte in.
  3. Maak een Azure Key Vault-account dat als host fungeert voor het CA-certificaat dat uw openbare sleutels bevat.
  4. Voeg roltoewijzing toe in Azure Key Vault voor de beheerde identiteit van de naamruimte.
  5. Aangepaste verificatie-instellingen configureren in uw Event Grid-naamruimte
  6. Uw clients kunnen verbinding maken met de Event Grid-naamruimte met behulp van de tokens van uw id-provider.

Een naamruimte maken en de bijbehorende subresources configureren

Volg de instructies uit de quickstart: Publiceren en abonneren op MQTT-berichten in Event Grid-naamruimte met Azure Portal om een naamruimte te maken en de bijbehorende subresources te configureren. Sla de stappen voor het maken van het certificaat en de client over naarmate de clientidentiteiten afkomstig zijn van het opgegeven token. Clientkenmerken zijn gebaseerd op de aangepaste claims in het clienttoken. De clientkenmerken worden gebruikt in de clientgroepquery, onderwerpsjabloonvariabelen en routeringsverrijkingsconfiguratie.

Beheerde identiteit inschakelen in uw Event Grid-naamruimte

De naamruimte maakt gebruik van de beheerde identiteit voor toegang tot uw Azure Key Vault-exemplaar om het servercertificaat voor uw aangepaste domein op te halen. Gebruik de volgende opdracht om door het systeem toegewezen beheerde identiteit in te schakelen in uw Event Grid-naamruimte:

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

Zie Beheerde identiteit inschakelen voor een Event Grid-naamruimte voor informatie over het configureren van systeem- en door de gebruiker toegewezen identiteiten met behulp van Azure Portal.

Een Azure Key Vault-account maken en uw servercertificaat uploaden

  1. Gebruik de volgende opdracht om een Azure Key Vault-account te maken:

    az keyvault create --name "<your-unique-keyvault-name>" --resource-group "<resource group name>" --location "centraluseaup" 
    
  2. Gebruik de volgende opdracht om een certificaat te importeren in Azure Key Vault

    az keyvault certificate import --vault-name "<your-key-vault-name>" -n "<cert name>" -f "<path to your certificate pem file> " 
    

    Notitie

    Uw certificaat moet de domeinnaam in de alternatieve onderwerpnaam voor DNS bevatten. Zie Zelfstudie: Een certificaat importeren in Azure Key Vault voor meer informatie.

Roltoewijzing toevoegen in Azure Key Vault voor de beheerde identiteit van de naamruimte

U moet toegang tot de naamruimte opgeven voor toegang tot uw Azure Key Vault-account met behulp van de volgende stappen:

  1. De principal-id van de Event Grid-naamruimte van het systeem beheerde identiteit ophalen met behulp van de volgende opdracht

    $principalId=(az eventgrid namespace show --resource-group <resource group name> --name <namespace name> --query identity.principalId -o tsv) 
    
  2. Haal uw Azure Key Vault-resource-id op.

    $keyVaultResourceId=(az keyvault show --resource-group <resource group name> --name <your key vault name> --query id -o tsv) 
    
  3. Voeg roltoewijzing toe in Key Vault voor de beheerde identiteit van de naamruimte.

    az role assignment create --role "Key Vault Certificate User" --assignee $principalId --scope $keyVaultResourceId 
    

    Zie Toegang tot Key Vault-sleutels, -certificaten en -geheimen bieden met een op rollen gebaseerd toegangsbeheer van Azure voor meer informatie over toegang tot Key Vault en de portal.

Aangepaste verificatie-instellingen configureren in uw Event Grid-naamruimte

In deze stap configureert u aangepaste verificatie-instellingen voor uw Event Grid-naamruimte met behulp van Azure Portal en Azure CLI. U moet eerst de naamruimte maken en deze vervolgens bijwerken met behulp van de volgende stappen.

Azure Portal gebruiken

  1. Navigeer naar uw Event Grid-naamruimte in Azure Portal.

  2. Selecteer Configuratie in het linkermenu op de pagina Event Grid-naamruimte.

  3. Geef in de sectie Aangepaste JWT-verificatie waarden op voor de volgende eigenschappen:

    1. Selecteer Aangepaste JWT-verificatie inschakelen.

    2. Tokenverlener: voer de waarde in van de verlenerclaims van de JWT-tokens, gepresenteerd door de MQTT-clients.

    3. Certificaat voor verlener toevoegen selecteren

      Schermopname van de sectie Aangepaste JWT-verificatie van de pagina Configuratie voor een Event Grid-naamruimte.

    4. Geef op de nieuwe pagina waarden op voor de volgende eigenschappen.

      1. Certificaat-URL: de certificaat-id van het certificaat van de uitgever in Azure Key Vault dat u hebt gemaakt. U kunt een certificaat selecteren met behulp van een sleutelkluis om het certificaat en de sleutelkluis in uw abonnementen te selecteren.

      2. Identiteit: de identiteit die wordt gebruikt voor verificatie met de Key Vault voor toegang tot het certificaat van de verlener dat is gemaakt.

      3. Selecteer Toevoegen.

        Schermopname van de pagina Certificaat voor verlener toevoegen.

  4. Selecteer Toepassen op de pagina Configuratie.

    Notitie

    U kunt maximaal twee iss certificaten toevoegen voor certificaat-/sleutelrotatiedoeleinden.

Azure CLI gebruiken

Gebruik de volgende opdracht om uw naamruimte bij te werken met de aangepaste JWT-verificatieconfiguratie.

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\"}}]}}' 

JSON-webtokenindeling

Json-webtokens zijn onderverdeeld in de secties JWT-header en JWT-nettolading.

JWT-header

De koptekst moet ten minste typ velden alg bevatten. typ moet altijd zijn JWS en alg altijd moeten zijn RS256. De tokenheader moet als volgt zijn:

{
    "typ": "JWT",
    "alg": "RS256"
}

JWT-nettolading

Event Grid vereist de volgende claims: iss, sub, aud, exp, . nbf

Name Beschrijving
iss Uitgevende instelling. De waarde in JWT moet overeenkomen met de verlener in de Event Grid-naamruimteconfiguratie voor aangepaste JWT-verificatie.
sub Onderwerp. Waarde wordt gebruikt als verificatie-id-naam.
aud Audiëntie. Waarde kan een tekenreeks of een matrix met tekenreeksen zijn. De waarde moet de hostnaam van de Standaard Event Grid-naamruimte en/of het aangepaste domein voor die Event Grid-naamruimte bevatten (indien geconfigureerd). Doelgroep kan andere tekenreeksen bevatten, maar we vereisen dat ten minste één van deze tekenreeksen een standaard Event Grid-naamruimtehostnaam of aangepast domein voor deze naamruimte is.
exp Vervaldatum. Unix-tijd waarop JWT verloopt.
nbf Niet eerder. Eenheidstijd wanneer JWT geldig wordt.

Event Grid wijst alle claims toe aan clientkenmerken als ze een van de volgende typen hebben: int32, string, array of strings. Standaardclaims iss, sub, aud, , expworden nbf uitgesloten van clientkenmerken. In het volgende JWT-voorbeeld worden slechts drie claims geconverteerd naar clientkenmerken, num_attr, , str_attr, str_list_attromdat ze de juiste typen int32, string, . array of stringsincorrect_attr_1, incorrect_attr_2worden incorrect_attr_3 niet geconverteerd naar clientkenmerken, omdat ze verkeerde typen hebben: 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"
    }
}