Udostępnij za pomocą


Stosuj tokeny sieci Web OAuth 2.0 JSON (JWT) do uwierzytelniania w przestrzeniach nazw

W tym artykule pokazano, jak uwierzytelniać się w przestrzeni nazw usługi Azure Event Grid przy użyciu tokenów sieci Web OAuth 2.0 JSON.

Broker MQTT usługi Azure Event Grid obsługuje uwierzytelnianie OAuth 2.0 JWT, które umożliwia klientom łączenie się i uwierzytelnianie za pomocą przestrzeni nazw usługi Event Grid przy użyciu tokenów sieci Web JSON wystawionych przez dowolnego dostawcę tożsamości, oprócz identyfikatora Entra firmy Microsoft.

Wymagania wstępne

Aby użyć uwierzytelniania OAuth 2.0 JWT dla przestrzeni nazw, należy spełnić następujące wymagania wstępne:

  • Dostawca tożsamości, który może wystawiać tokeny internetowe JSON.
  • Certyfikat urzędu certyfikacji zawierający klucze publiczne używane do weryfikowania tokenów klienta (Key Vault) lub certyfikaty kluczy publicznych w formacie PEM (bezpośrednie przesyłanie).

Kroki na wysokim poziomie

Aby użyć uwierzytelniania OAuth 2.0 JWT dla przestrzeni nazw, wykonaj następujące kroki:

  1. Utwórz przestrzeń nazw i skonfiguruj jej zasoby podrzędne.

  2. Włącz tożsamość zarządzaną w przestrzeni nazw usługi Event Grid.

  3. Skonfiguruj ustawienia uwierzytelniania OAuth 2.0 w przestrzeni nazw usługi Event Grid, wykonując następujące kroki:

    1. Utwórz konto usługi Azure Key Vault, które hostuje certyfikat urzędu certyfikacji, który zawiera klucze publiczne, i dodaj przypisanie roli w usłudze Key Vault dla tożsamości zarządzanej przestrzeni nazw.
    2. Możesz też przekazać plik PEM z certyfikatami klucza publicznego do przestrzeni nazwowej.
  4. Klienci mogą łączyć się z przestrzenią nazw usługi Event Grid przy użyciu tokenów dostarczonych przez dostawcę tożsamości.

Tworzenie przestrzeni nazw i konfigurowanie jej podzasobów

Postępuj zgodnie z instrukcjami z Szybki start: publikowanie i subskrybowanie komunikatów MQTT w przestrzeni nazw usługi Event Grid za pomocą portalu Azure w celu utworzenia przestrzeni nazw i skonfigurowania jej podzasobów. Pomiń kroki tworzenia certyfikatu i klienta, ponieważ tożsamości klienta pochodzą z podanego tokenu. Atrybuty klienta są oparte na niestandardowych twierdzeniach w jego tokenie. Atrybuty klienta są używane w zapytaniu grupy klienta, zmiennych szablonu tematu i konfiguracji wzbogacania routingu.

Włącz tożsamość zarządzaną w przestrzeni nazw usługi Event Grid

Przestrzeń nazw używa tożsamości zarządzanej do uzyskania dostępu do Twojej instancji Azure Key Vault, aby pobrać certyfikat serwera dla niestandardowej domeny. Użyj następującego polecenia, aby włączyć tożsamość zarządzaną przypisaną przez system w przestrzeni nazw usługi Event Grid:

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

Aby uzyskać informacje dotyczące konfigurowania tożsamości systemowych i przypisanych przez użytkownika przy użyciu portalu Azure, patrz Włączanie tożsamości zarządzanej dla przestrzeni nazw Event Grid.

Skonfiguruj ustawienia uwierzytelniania OAuth 2.0 JWT w przestrzeni nazw usługi Event Grid -Key Vault

Najpierw utwórz konto Azure Key Vault, prześlij certyfikat serwera i przypisz odpowiednią rolę tożsamości zarządzanej przestrzeni nazw w magazynie kluczy. Następnie skonfigurujesz niestandardowe ustawienia uwierzytelniania w przestrzeni nazw usługi Event Grid przy użyciu portalu Azure albo Azure CLI. Najpierw należy utworzyć przestrzeń nazw, a następnie zaktualizować ją, wykonując następujące kroki.

Tworzenie konta usługi Azure Key Vault i przekazywanie certyfikatu serwera

  1. Użyj następującego polecenia, aby utworzyć konto usługi Azure Key Vault:

    az keyvault create --name "<your-unique-keyvault-name>" --resource-group "<resource group name>" --location "centraluseuap" 
    
  2. Użyj następującego polecenia, aby zaimportować certyfikat do usługi Azure Key Vault

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

    Uwaga

    Certyfikat musi zawierać nazwę domeny w polu Subject Alternative Name dla DNS. Aby uzyskać więcej informacji, zobacz Samouczek: importowanie certyfikatu w usłudze Azure Key Vault.

Dodaj przypisanie roli w usłudze Azure Key Vault dla tożsamości zarządzanej przestrzeni nazw domeny

Aby uzyskać dostęp do konta usługi Azure Key Vault, musisz zapewnić dostęp do przestrzeni nazw, wykonując następujące kroki:

  1. Pobierz identyfikator głównego obiektu tożsamości zarządzanej przez system w przestrzeni nazw usługi Event Grid za pomocą następującego polecenia

    $principalId=(az eventgrid namespace show --resource-group <resource group name> --name <namespace name> --query identity.principalId -o tsv) 
    
  2. Pobierz identyfikator zasobu usługi Azure Key Vault.

    $keyVaultResourceId=(az keyvault show --resource-group <resource group name> --name <your key vault name> --query id -o tsv) 
    
  3. Dodaj przypisanie roli w usłudze Key Vault dla zarządzanej tożsamości przestrzeni nazw.

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

    Aby uzyskać więcej informacji na temat dostępu do usługi Key Vault i środowiska portalu, zobacz Zapewnianie dostępu do kluczy, certyfikatów i wpisów tajnych usługi Key Vault przy użyciu kontroli dostępu opartej na rolach platformy Azure.

Konfigurowanie uwierzytelniania przy użyciu witryny Azure Portal

  1. Przejdź do przestrzeni nazw usługi Event Grid w witrynie Azure Portal.

  2. Na stronie usługi Event Grid Przestrzeń nazw wybierz Konfiguracja w menu po lewej stronie.

  3. W sekcji Niestandardowe uwierzytelnianie JWT określ wartości następujących właściwości:

    1. Wybierz pozycję Włącz niestandardowe uwierzytelnianie JWT.

    2. Wystawca tokenu: Wprowadź wartość roszczeń emitenta żetonów JWT przedstawionych przez klientów MQTT.

    3. W polu Certyfikat wystawcy wybierz opcję Z usługi Azure Key Vault.

      Zrzut ekranu przedstawiający wybór opcji usługi Azure Key Vault na stronie Konfiguracja przestrzeni nazw usługi Event Grid.

    4. Na nowej stronie określ wartości dla następujących właściwości.

      1. Identyfikator certyfikatu wystawcy w usłudze Azure Key Vault, który utworzyłeś: adres URL certyfikatu. Zamiast tego możesz wybrać pozycję Wybierz certyfikat przy użyciu skarbca kluczy, aby wybrać certyfikat i skarbiec kluczy z subskrypcji.

      2. Tożsamość: tożsamość używana do uwierzytelniania w usłudze Key Vault w celu uzyskania dostępu do utworzonego certyfikatu wystawcy.

      3. Wybierz Dodaj.

        Zrzut ekranu przedstawiający stronę dodawania certyfikatu wystawcy.

  4. Po powrocie na stronę Konfiguracja wybierz pozycję Zastosuj.

    Uwaga

    Do celów rotacji certyfikatów/kluczy można dodać maksymalnie dwa iss certyfikaty.

Użyj interfejsu wiersza polecenia platformy Azure

Użyj następującego polecenia, aby zaktualizować przestrzeń nazw przy użyciu niestandardowej konfiguracji uwierzytelniania 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\"
          }
        }
      ]
    }
  }'
 

Format tokenu internetowego JSON

Tokeny internetowe JSON muszą mieć sekcje nagłówka JWT, ładunku JWT i podpisu JWT.

Nagłówek JWT

Nagłówek musi zawierać co najmniej pola typ oraz alg.  typ musi zawsze być JWS i alg zawsze musi mieć wartość RS256. Nagłówek tokenu musi być następujący:

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

Ładunek danych JWT

Usługa Event Grid wymaga następujących oświadczeń: iss, , subaud, exp, nbf.

Nazwa/nazwisko opis
iss Emitenta. Wartość w JWT musi być zgodna z wydawcą w konfiguracji przestrzeni nazw Event Grid na potrzeby niestandardowego uwierzytelniania JWT.
sub Temat. Wartość jest używana jako nazwa tożsamości do uwierzytelniania.
aud Publiczność. Wartość to tablica ciągów. Wartość musi zawierać standardową nazwę hosta przestrzeni nazw usługi Event Grid i/lub domenę niestandardową dla tej przestrzeni nazw usługi Event Grid (jeśli została skonfigurowana). Obiekt może zawierać inne ciągi, ale dla tej przestrzeni nazw jest wymagane, aby co najmniej jeden z tych ciągów był standardową nazwą hosta przestrzeni nazw usługi Event Grid lub domeną niestandardową.
exp Wygaśnięcie. Czas systemu Unix po wygaśnięciu JWT.
nbf Nie wcześniej. Moment, w którym JWT staje się ważny.

Usługa Event Grid mapuje wszystkie roszczenia na atrybuty klienta, jeśli mają jeden z następujących typów: int32, string, array of strings. Standardowe oświadczenia iss, sub, aud, exp i nbf są wykluczone z atrybutów klienta. W poniższym przykładzie JWT tylko trzy oświadczenia są konwertowane na atrybuty klienta, num_attr, str_attr, str_list_attr, ponieważ mają poprawne typy int32, , string. array of stringsincorrect_attr_1, incorrect_attr_2, incorrect_attr_3 nie są konwertowane na atrybuty klienta, ponieważ mają nieprawidłowe typy: float, , array of integersobject.

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

Konfigurowanie ustawień uwierzytelniania OAuth 2.0 JWT w przestrzeni nazw usługi Event Grid — bezpośrednie przesyłanie

W tym kroku skonfigurujesz niestandardowe ustawienia uwierzytelniania JWT w przestrzeni nazw usługi Event Grid, używając portalu Azure i Azure CLI. Najpierw należy utworzyć przestrzeń nazw, a następnie zaktualizować ją, wykonując następujące kroki.

Korzystanie z witryny Azure Portal

  1. Przejdź do przestrzeni nazw Event Grid w portalu Azure.
  2. Na stronie Przestrzeń nazw Event Grid wybierz pozycję Konfiguracja w menu po lewej.
  3. W sekcji Uwierzytelnianie niestandardowe JWT określ wartości następujących właściwości:
    1. Wybierz pozycję Włącz niestandardowe uwierzytelnianie JWT.

    2. Wystawca tokenu: Wprowadź wartość roszczeń emitenta żetonów JWT przedstawionych przez klientów MQTT.

    3. Wybierz opcję certyfikatu wystawcy — przekazywanie bezpośrednie.

      Zrzut ekranu przedstawiający wybór opcji Bezpośrednie przesyłanie na stronie konfiguracji przestrzeni nazw usługi Event Grid.

  4. Na nowej stronie określ wartości dla następujących właściwości.
    1. Certyfikat: przekaż certyfikat serwera w formacie PEM.

    2. Dziecko: unikatowy identyfikator klucza dla certyfikatu.

    3. Wybierz Dodaj.

      Zrzut ekranu przedstawiający stronę przesyłania certyfikatu wystawcy.

  5. Po powrocie na stronę Konfiguracja wybierz pozycję Zastosuj.

Użyj interfejsu wiersza polecenia platformy Azure

Użyj następującego polecenia, aby zaktualizować przestrzeń nazw przy użyciu konfiguracji uwierzytelniania 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-----" 
            } 
        ] 
    } 
  • Zastąp <resource-group-name>, <namespace-name>, <location>, <key-vault-name>, <certificate-name> i <certificate-in-PEM-format> wartościami rzeczywistymi.
  • Zakodowana wartość certyfikatu musi zawierać pełny certyfikat i klucz publiczny w formacie PEM, w tym nagłówki ( "-----BEGIN CERTIFICATE-----", "-----END CERTIFICATE----, ``-----BEGIN PUBLIC KEY----- and -----END PUBLIC KEY-----).
  • Upewnij się, że podany certyfikat klucza publicznego jest prawidłowy i zaufany przez dostawcę tożsamości.
  • Regularnie aktualizuj zakodowane certyfikatyIssuerCertificates, jeśli certyfikaty są obracane lub wygasły.

Format tokenu internetowego JSON

Tokeny internetowe JSON muszą mieć sekcje nagłówka JWT, ładunku JWT i podpisu JWT.

Usługa Event Grid wymaga następujących oświadczeń: iss, , subaud, exp, nbf.

  • Element kid jest opcjonalny. Jeśli jest obecny, certyfikat z dopasowaniem kid jest używany do walidacji.
  • Lista standardowych oświadczeń, które nie są używane jako atrybuty — iss, , sub, audexpnbf, , . iatjti
  • Wszystkie roszczenia, które mają poprawny typ danych (liczba pasująca do int32, ciąg znaków, tablica ciągów znaków) są używane jako atrybuty. W przykładzie num_attr_posoświadczenia num_attr_negstr_attrstr_list_attr mają poprawne typy danych i są używane jako atrybuty.
  • W przykładzie bool_attroświadczenia num_attr_to_bignum_attr_floatobj_attr mają nieprawidłowe typy danych i nie są używane jako atrybuty.
{ 
  "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" 
  } 
}