Sdílet prostřednictvím


Použití webových tokenů JSON OAuth 2.0 (JWT) k ověřování pomocí oborů názvů

Tento článek ukazuje, jak se ověřit pomocí oboru názvů Azure Event Grid pomocí OAuth 2.0 webových tokenů JSON.

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

Požadavky

Pokud chcete pro obory názvů použít ověřování OAuth 2.0 JWT, 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 (Key Vault) nebo souboru PEM vašich certifikátů veřejných klíčů (přímé nahrání).

Základní kroky

Pokud chcete pro obory názvů použít ověřování OAuth 2.0 JWT, postupujte takto:

  1. Vytvořte obor názvů a nakonfigurujte jeho dílčí zdroje.

  2. Povolte spravovanou identitu v názvovém prostoru služby Event Grid.

  3. Pomocí následujícího postupu nakonfigurujte nastavení ověřování OAuth 2.0 ve vašem oboru názvů Event Grid:

    1. Vytvořte účet Azure Key Vault, který hostuje certifikát certifikační autority obsahující vaše veřejné klíče, a přiřaďte roli ve službě Key Vault pro spravovanou identitu oboru názvů.
    2. Nebo nahrajte soubor PEM certifikátů veřejného klíče do oblasti názvů.
  4. Vaši klienti se mohou připojit k namespace služby Event Grid pomocí tokenů poskytovaných vaším zprostředkovatelem identity.

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

Postupujte podle pokynů z rychlého startu: Publikování a přihlášení k odběru zpráv MQTT v oboru názvů Event Gridu 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 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í.

Aktivujte spravovanou identitu ve službě Event Grid pro váš obor názvů

Jmenný prostor využívá spravovanou identitu k přístupu k vaší instanci Azure Key Vault a získání certifikátu serveru pro vlastní doménu. Pomocí následujícího příkazu povolte systémem přiřazenou spravovanou identitu ve vašem datovém prostoru Event Grid:

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.

Nakonfigurujte nastavení ověřování OAuth 2.0 JWT v prostoru názvů Event Grid -Key Vault.

Nejprve vytvořte účet služby Azure Key Vault, nahrajte certifikát serveru a přiřaďte spravované identitě oboru názvů odpovídající roli v trezoru klíčů. Potom nakonfigurujete vlastní nastavení ověřování v oboru názvů služby Event Grid pomocí buď Azure Portal, nebo Azure CLI. Nejprve musíte vytvořit obor názvů a pak ho aktualizovat pomocí následujícího postupu.

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 "centraluseuap" 
    
  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 v alternativním názvu předmětu (Subject Alternative Name) pro DNS. Další informace najdete v tématu Kurz: Import certifikátu ve službě Azure Key Vault.

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

Potřebujete přístup k oboru názvů, abyste se dostali ke svému účtu služby Azure Key Vault použitím následujících kroků:

  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 Azure Key Vault.

    $keyVaultResourceId=(az keyvault show --resource-group <resource group name> --name <your key vault name> --query id -o tsv) 
    
  3. Přiřaďte roli 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 ověřování pomocí webu Azure Portal

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

  2. Na stránce Obor názvů Event Grid vyberte v levé nabídce 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 JWT, které předkládají klienti MQTT.

    3. Vyberte certifikát vystavitelez Azure Key Vault.

      Snímek obrazovky znázorňující výběr možnosti Služby Azure Key Vault 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 i trezor klíčů z vašich předplatných.

      2. Identita: identita použitá k autentizaci s Key Vault pro získání přístupu k certifikátu vystavitele, který byl vytvořen.

      3. Vyberte Přidat.

        Snímek obrazovky, který ukazuje stránku pro přidání certifikátu 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 svůj obor názvů s vlastní konfigurací ověřování pomocí JWT.

az resource update \
  --resource-type Microsoft.EventGrid/namespaces \
  --api-version 2024-06-01-preview \
  --ids /subscriptions/1111a1a1-bb2b-cc3c-dd4d-ffffee5e5e5e/resourceGroups/sample-rg/providers/Microsoft.EventGrid/namespaces/sample-namespace \
  --set properties.topicSpacesConfiguration.clientAuthentication='{
    \"customJwtAuthentication\":{
      \"tokenIssuer\":\"sample-issuer\",
      \"issuerCertificates\":[
        {
          \"certificateUrl\":\"https://sample-vault.vault.azure.net/certificates/sample-cert/12345abcdef67890\",
          \"identity\":{
            \"type\":\"UserAssigned\",
            \"userAssignedIdentity\":\"/subscriptions/1111a1a1-bb2b-cc3c-dd4d-ffffee5e5e5e/resourceGroups/sample-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/sample-identity\"
          }
        }
      ]
    }
  }'
 

Formát webového tokenu JSON

Webové tokeny JSON musí mít oddíly s hlavičkou JWT, užitečným zatížením JWT a podpisem 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, sub, aud, 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 je použita jako název ověřovací identity.
aud Obecenstvo. Hodnota je 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 oboru názvů Event Grid nebo vlastní doménou pro tento obor názvů.
exp Vypršení. Čas Unix, kdy JWT vyprší.
nbf Ne dřív. Časový okamžik, kdy se JWT stává platným.

Event Grid mapuje všechny nároky na atributy klienta, pokud mají jeden z následujících typů: int32, string, array of strings. Standardní deklarace iss, sub, aud, exp, nbf jsou 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_attrprotože mají správné typy str_list_attr, int32, stringarray of strings.  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"
    }
}

Konfigurujte nastavení ověřování OAuth 2.0 JWT v prostoru názvů Event Grid – Přímé nahrání

V tomto kroku nakonfigurujete vlastní nastavení ověřování JWT v oboru názvů služby Event Grid pomocí 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. Přejděte do svého oboru názvů Event Grid v Azure Portalu.
  2. Na stránce Obor názvů služby Event Grid 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 JWT, které předkládají klienti MQTT.

    3. Vyberte možnost certifikátu vydavatele – Přímé nahrání.

      Snímek obrazovky, který znázorňuje výběr možnosti přímého nahrání na konfigurační stránce pro obor názvů Event Grid.

  4. Na nové stránce zadejte hodnoty následujících vlastností.
    1. Certifikát: Nahrajte certifikát serveru ve formátu PEM.

    2. Dítě: Jedinečný identifikátor klíče pro certifikát.

    3. Vyberte Přidat.

      Snímek obrazovky, který ukazuje stránku pro nahrání certifikátu vystavitele.

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

Použití Azure CLI

Pomocí následujícího příkazu aktualizujte obor názvů pomocí konfigurace ověřování OAuth 2.0 JWT.

az eventgrid namespace update \ 
    --resource-group <resource-group-name> \ 
    --name <namespace-name> \ 
    --api-version 2024-12-15-preview \ 
    --set customJwtAuthenticationSettings='{ 
        "tokenIssuer": "issuer-name", 
        "encodedIssuerCertificates": [
            { 
                "kid": "key1", 
                "encodedCertificate": "-----BEGIN CERTIFICATE-----\n<certificate-in-PEM-format>\n-----END CERTIFICATE-----" 
            } 
        ] 
    } 
  • Nahraďte <resource-group-name>, <namespace-name>, <location>, <key-vault-name>, <certificate-name> a <certificate-in-PEM-format> vašimi skutečnými hodnotami.
  • Hodnota encodedCertificate musí obsahovat úplný certifikát a veřejný klíč ve formátu PEM, včetně hlaviček ( "-----BEGIN CERTIFICATE-----", "-----END CERTIFICATE----, ``-----BEGIN PUBLIC KEY----- and -----END PUBLIC KEY-----).
  • Ujistěte se, že zadaný certifikát veřejného klíče je platný a důvěryhodný vaším zprostředkovatelem identity.
  • Pravidelně aktualizujte šifrované certifikáty vydavatele, pokud dojde k rotaci certifikátů nebo vyprší jejich platnost.

Formát webového tokenu JSON

Webové tokeny JSON musí mít oddíly s hlavičkou JWT, užitečným zatížením JWT a podpisem JWT.

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

  • kid je nepovinný. Pokud je přítomen, použije se k ověření certifikát s odpovídajícím kid.
  • Seznam standardních deklarací, které se nepoužívají jako atributy - iss, sub, aud, exp, nbf, , iat. jti
  • Všechny nároky, které mají správný datový typ (číslo odpovídající int32, řetězec, pole řetězců), se používají jako atributy. V příkladu num_attr_pos, num_attr_neg, str_attr, str_list_attr mají tvrzení správné datové typy a jsou použity jako atributy.
  • V příkladu bool_attr, num_attr_to_big, num_attr_float, obj_attr mají nároky nesprávné datové typy a nemohou být použity jako atributy.
{ 
  "typ": "JWT", 
  "alg": "RS256", 
  "kid": "keyId1" 
}.{ 
  "iss": "some-issuer", 
  "sub": "device1", 
  "aud": "event-grid-namespace.ts.eventgrid.azure.net", 
  "exp": 1770426501, 
  "nbf": 1738886901, 
  "bool_attr": true, 
  "num_attr_pos": 1, 
  "num_attr_neg": -1, 
  "num_attr_to_big": 9223372036854775807, 
  "num_attr_float": 1.23, 
  "str_attr": "str_value", 
  "str_list_attr": [ 
    "str_value_1", 
    "str_value_2" 
  ], 
  "obj_attr": { 
      "key": "value" 
  } 
}