Dela via


Autentisera med namnområden med JSON-webbtoken

Den här artikeln visar hur du autentiserar med Azure Event Grid-namnområdet med hjälp av JSON-webbtoken.

Azure Event Grids MQTT-koordinator stöder anpassad JWT-autentisering, vilket gör det möjligt för klienter att ansluta och autentisera med ett Event Grid-namnområde med hjälp av JSON-webbtoken som utfärdas av alla identitetsprovider, förutom Microsoft Entra-ID.

Förutsättningar

Om du vill använda anpassad JWT-autentisering för namnområden måste du ha följande förutsättningar:

  • Identitetsprovider som kan utfärda Json-webbtoken.
  • CA-certifikat som innehåller dina offentliga nycklar som används för att verifiera klienttoken.
  • Azure Key Vault-konto som värd för certifikatutfärdarcertifikatet som innehåller dina offentliga nycklar.

Steg på hög nivå

Följ dessa steg om du vill använda anpassad JWT-autentisering för namnområden:

  1. Skapa ett namnområde och konfigurera dess underresurser.
  2. Aktivera hanterad identitet i Event Grid-namnområdet.
  3. Skapa ett Azure Key Vault-konto som är värd för certifikatutfärdarcertifikatet som innehåller dina offentliga nycklar.
  4. Lägg till rolltilldelning i Azure Key Vault för namnområdets hanterade identitet.
  5. Konfigurera anpassade autentiseringsinställningar på Event Grid-namnområdet
  6. Dina klienter kan ansluta till Event Grid-namnområdet med hjälp av de token som tillhandahålls av identitetsprovidern.

Skapa ett namnområde och konfigurera dess underresurser

Följ anvisningarna i snabbstarten: Publicera och prenumerera på MQTT-meddelanden i Event Grid-namnområdet med Azure Portal för att skapa ett namnområde och konfigurera dess underresurser. Hoppa över stegen för att skapa certifikat och klient eftersom klientidentiteterna kommer från den angivna token. Klientattribut baseras på anpassade anspråk i klienttoken. Klientattributen används i klientgruppsfrågan, ämnesmallvariabler och routning av berikningskonfiguration.

Aktivera hanterad identitet i Event Grid-namnområdet

Namnområdet använder den hanterade identiteten för att komma åt din Azure Key Vault-instans för att hämta servercertifikatet för din anpassade domän. Använd följande kommando för att aktivera systemtilldelad hanterad identitet i Event Grid-namnområdet:

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

Information om hur du konfigurerar system- och användartilldelade identiteter med hjälp av Azure Portal finns i Aktivera hanterad identitet för ett Event Grid-namnområde.

Skapa ett Azure Key Vault-konto och ladda upp servercertifikatet

  1. Använd följande kommando för att skapa ett Azure Key Vault-konto:

    az keyvault create --name "<your-unique-keyvault-name>" --resource-group "<resource group name>" --location "centraluseaup" 
    
  2. Använd följande kommando för att importera ett certifikat till Azure Key Vault

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

    Kommentar

    Certifikatet måste innehålla domännamnet i alternativt namn på certifikatmottagaren för DNS. Mer information finns i Självstudie: Importera ett certifikat i Azure Key Vault.

Lägga till rolltilldelning i Azure Key Vault för namnområdets hanterade identitet

Du måste ge åtkomst till namnområdet för att få åtkomst till ditt Azure Key Vault-konto med hjälp av följande steg:

  1. Hämta Event Grid-namnområdessystemets hanterade identitetshuvudnamns-ID med hjälp av följande kommando

    $principalId=(az eventgrid namespace show --resource-group <resource group name> --name <namespace name> --query identity.principalId -o tsv) 
    
  2. Hämta ditt Resurs-ID för Azure Key Vault.

    $keyVaultResourceId=(az keyvault show --resource-group <resource group name> --name <your key vault name> --query id -o tsv) 
    
  3. Lägg till rolltilldelning i Key Vault för namnområdets hanterade identitet.

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

    Mer information om Åtkomst till Key Vault och portalen finns i Ge åtkomst till Key Vault-nycklar, certifikat och hemligheter med en rollbaserad åtkomstkontroll i Azure.

Konfigurera anpassade autentiseringsinställningar på Event Grid-namnområdet

I det här steget konfigurerar du anpassade autentiseringsinställningar på Event Grid-namnområdet med hjälp av Azure Portal och Azure CLI. Du måste först skapa namnområdet och sedan uppdatera det med hjälp av följande steg.

Använda Azure-portalen

  1. Gå till Event Grid-namnområdet i Azure Portal.

  2. På sidan Event Grid-namnområde väljer du Konfiguration på den vänstra menyn.

  3. I avsnittet Anpassad JWT-autentisering anger du värden för följande egenskaper:

    1. Välj Aktivera anpassad JWT-autentisering.

    2. Token issuer: Ange värdet för utfärdaranspråken för JWT-token som presenteras av MQTT-klienterna.

    3. Välj Lägg till utfärdarcertifikat

      Skärmbild som visar avsnittet Anpassad JWT-autentisering på sidan Konfiguration för ett Event Grid-namnområde.

    4. På den nya sidan anger du värden för följande egenskaper.

      1. Certifikat-URL: Certifikatidentifieraren för utfärdarcertifikatet i Azure Key Vault som du skapade. Du kan välja Välj ett certifikat med hjälp av ett nyckelvalv i stället för att välja certifikatet och nyckelvalvet från dina prenumerationer.

      2. Identitet: den identitet som används för att autentisera med Key Vault för att få åtkomst till utfärdarcertifikatet som skapades.

      3. Markera Lägga till.

        Skärmbild som visar sidan Lägg till utfärdarcertifikat.

  4. På sidan Konfiguration väljer du Använd.

    Kommentar

    Du kan lägga till upp till två iss certifikat för certifikat-/nyckelrotation.

Använda Azure CLI

Använd följande kommando för att uppdatera namnområdet med den anpassade JWT-autentiseringskonfigurationen.

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-webbtokenformat

Json-webbtoken delas in i avsnitten JWT-rubrik och JWT-nyttolast.

JWT-rubrik

Huvudet måste innehålla minst typ och alg fält. typ måste alltid vara JWS och alg måste alltid vara RS256. Tokenrubriken måste vara följande:

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

JWT-nyttolast

Event Grid kräver följande anspråk: iss, sub, aud, exp, . nbf

Name beskrivning
iss Utfärdare. Värdet i JWT måste matcha utfärdaren i Event Grid-namnområdeskonfigurationen för anpassad JWT-autentisering.
sub Ämne. Värdet används som autentiseringsidentitetsnamn.
aud Publik. Värdet kan vara en sträng eller en matris med strängar. Värdet måste innehålla standardvärden för Event Grid-namnområdet och/eller anpassad domän för event grid-namnområdet (om det har konfigurerats). Målgruppen kan innehålla andra strängar, men vi kräver att minst en av dessa strängar är ett standard värdnamn för Event Grid-namnområdet eller en anpassad domän för det här namnområdet.
exp Förfallodatum. Unix-tid när JWT upphör att gälla.
nbf Inte tidigare. Enhetstid när JWT blir giltigt.

Event Grid mappar alla anspråk till klientattribut om de har någon av följande typer: int32, string, array of strings. Standardanspråk iss, sub, aud, , nbf expundantas från klientattribut. I följande JWT-exempel konverteras endast tre anspråk till klientattribut, num_attr, , , str_list_attreftersom de har rätt typer int32, string, array of stringsstr_attr. incorrect_attr_1, incorrect_attr_2, incorrect_attr_3 konverteras inte till klientattribut eftersom de har fel typer: 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"
    }
}