Ověřování pomocí oborů názvů pomocí webových tokenů JSON

Tento článek ukazuje, jak provést ověření pomocí oboru názvů Služby Event Grid pomocí webových tokenů JSON.

Zprostředkovatel MQTT azure Event Gridu podporuje vlastní ověřování JWT, které umožňuje klientům připojit se k oboru názvů Event Gridu a ověřit ho pomocí webových tokenů JSON vydaných libovolným zprostředkovatelem identity, a to kromě ID Microsoft Entra.

Požadavky

Pokud chcete použít vlastní ověřování JWT pro obory názvů, musíte mít následující požadavky:

  • Zprostředkovatel identity, který může vydávat webové tokeny JSON.
  • Certifikát certifikační autority, který obsahuje vaše veřejné klíče používané k ověření tokenů klienta.
  • Účet služby Azure Key Vault pro hostování certifikátu certifikační autority, který obsahuje vaše veřejné klíče.

Základní kroky

Pokud chcete pro obory názvů použít vlastní ověřování JWT, 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. Vytvořte účet služby Azure Key Vault, který je hostitelem certifikátu certifikační autority, který obsahuje vaše veřejné klíče.
  4. Přidání přiřazení role ve službě Azure Key Vault pro spravovanou identitu oboru názvů
  5. Konfigurace vlastního nastavení ověřování v oboru názvů služby Event Grid
  6. Vaši klienti se můžou připojit k oboru názvů Služby Event Grid pomocí tokenů poskytovaných vaším zprostředkovatelem identity.

Vytvoření oboru názvů a konfigurace jeho dílčích zdrojů

Postupujte podle pokynů z rychlého startu: Publikování a přihlášení k odběru zpráv MQTT ve službě Event Grid Namespace pomocí webu Azure Portal za účelem vytvoření oboru názvů a konfigurace jeho dílčích zdrojů. Přeskočte kroky pro vytvoření certifikátu a klienta, protože identity klientů pocházejí z poskytnutého tokenu. Atributy klienta jsou založené na vlastních deklaracích identity 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í.

Povolení spravované identity v oboru názvů služby Event Grid

Obor názvů používá spravovanou identitu pro přístup k instanci služby Azure Key Vault k získání certifikátu serveru pro vaši vlastní doménu. Pomocí následujícího příkazu povolte spravovanou identitu přiřazenou systémem v oboru názvů Event Gridu:

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.

Vytvoření účtu služby Azure Key Vault a nahrání certifikátu serveru

  1. Pomocí následujícího příkazu vytvořte účet služby Azure Key Vault:

    az keyvault create --name "<your-unique-keyvault-name>" --resource-group "<resource group name>" --location "centraluseaup" 
    
  2. Pomocí následujícího příkazu naimportujte certifikát do služby Azure Key Vault.

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

    Poznámka:

    Váš certifikát musí obsahovat název domény do alternativního názvu subjektu pro DNS. Další informace najdete v tématu Kurz: Import certifikátu ve službě Azure Key Vault.

Přidání přiřazení role ve službě Azure Key Vault pro spravovanou identitu oboru názvů

Přístup k oboru názvů potřebujete pro přístup k účtu služby Azure Key Vault pomocí následujícího postupu:

  1. Získání ID instančního objektu identity spravovaného systémem služby Event Grid pomocí následujícího příkazu

    $principalId=(az eventgrid namespace show --resource-group <resource group name> --name <namespace name> --query identity.principalId -o tsv) 
    
  2. Získejte ID prostředku služby Azure Key Vault.

    $keyVaultResourceId=(az keyvault show --resource-group <resource group name> --name <your key vault name> --query id -o tsv) 
    
  3. Přidání přiřazení role ve službě Key Vault pro spravovanou identitu oboru názvů

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

    Další informace o přístupu ke službě Key Vault a prostředí portálu najdete v tématu Poskytnutí přístupu k klíčům, certifikátům a tajným kódům služby Key Vault pomocí řízení přístupu na základě role v Azure.

Konfigurace vlastního nastavení ověřování v oboru názvů služby Event Grid

V tomto kroku nakonfigurujete vlastní nastavení ověřování v oboru názvů Služby Event Grid pomocí webu Azure Portal a Azure CLI. Nejprve musíte vytvořit obor názvů a pak ho aktualizovat pomocí následujícího postupu.

Použití webu Azure Portal

  1. Na webu Azure Portal přejděte do svého oboru názvů Event Gridu.

  2. Na stránce Event Grid Namespace vyberte v nabídce vlevo možnost Konfigurace.

  3. V části Vlastní ověřování JWT zadejte hodnoty následujících vlastností:

    1. Vyberte Povolit vlastní ověřování JWT.

    2. Vystavitel tokenu: Zadejte hodnotu deklarací vystavitele tokenů JWT prezentovaných klienty MQTT.

    3. Výběr možnosti Přidat certifikát vystavitele

      Snímek obrazovky znázorňující část Vlastní ověřování JWT na stránce Konfigurace pro obor názvů Event Gridu

    4. Na nové stránce zadejte hodnoty následujících vlastností.

      1. Adresa URL certifikátu: Identifikátor certifikátu vystavitele ve službě Azure Key Vault, který jste vytvořili. Místo toho můžete vybrat certifikát pomocí trezoru klíčů a vybrat certifikát a trezor klíčů z vašich předplatných.

      2. Identita: identita použitá k ověření ve službě Key Vault pro přístup k vytvořenému certifikátu vystavitele.

      3. Vyberte Přidat.

        Snímek obrazovky se stránkou Přidat certifikát vystavitele

  4. Zpět na stránce Konfigurace vyberte Použít.

    Poznámka:

    Pro účely obměny certifikátů a klíčů můžete přidat až dva iss certifikáty.

Použití Azure CLI

Pomocí následujícího příkazu aktualizujte obor názvů vlastní konfigurací ověřování JWT.

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

Formát webového tokenu JSON

Webové tokeny JSON jsou rozdělené do oddílů hlavičky JWT a datové části JWT.

Hlavička JWT

Záhlaví musí obsahovat alespoň typ pole a alg pole. typ musí být JWS vždy a alg musí být RS256vždy . Hlavička tokenu musí být následující:

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

Datová část JWT

Event Grid vyžaduje následující deklarace identity: iss, subaud, exp, , nbf.

Název Popis
iss Emitent. Hodnota v JWT se musí shodovat s vystavitelem v konfiguraci oboru názvů Event Grid pro vlastní ověřování JWT.
sub Předmět. Hodnota se používá jako název identity ověřování.
aud Obecenstvo. Hodnota může být řetězec nebo pole řetězců. Hodnota musí obsahovat standardní název hostitele služby Event Grid nebo vlastní doménu pro tento obor názvů Event Gridu (pokud je nakonfigurovaný). Cílová skupina může obsahovat další řetězce, ale vyžadujeme, aby alespoň jeden z těchto řetězců byl standardním názvem hostitele služby Event Grid nebo vlastní doménou pro tento obor názvů.
exp Vypršení. Unix time when JWT expires.
nbf Ne dřív. Doba jednotek, kdy se JWT stane platným.

Event Grid mapuje všechny deklarace identity na atributy klienta, pokud mají jeden z následujících typů: int32, , array of stringsstring. Standardní deklarace identity iss, , sub, nbf audexpjsou vyloučeny z atributů klienta. V následujícím příkladu JWT jsou pouze tři deklarace identity převedeny na atributy klienta , num_attr, , , str_list_attrprotože mají správné typy int32, string, array of stringsstr_attr. incorrect_attr_1, incorrect_attr_2incorrect_attr_3 nejsou převedeny na atributy klienta, protože mají nesprávné typy: 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"
    }
}