Uwierzytelnianie za pomocą przestrzeni nazw przy użyciu tokenów sieci Web JSON
W tym artykule pokazano, jak uwierzytelniać się w przestrzeni nazw usługi Azure Event Grid przy użyciu tokenów sieci Web JSON.
Broker MQTT usługi Azure Event Grid obsługuje niestandardowe uwierzytelnianie 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ć niestandardowego uwierzytelniania 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.
- Konto usługi Azure Key Vault do hostowania certyfikatu urzędu certyfikacji zawierającego klucze publiczne.
Ogólne kroki
Aby użyć niestandardowego uwierzytelniania JWT dla przestrzeni nazw, wykonaj następujące kroki:
- Utwórz przestrzeń nazw i skonfiguruj jej podźródła.
- Włącz tożsamość zarządzaną w przestrzeni nazw usługi Event Grid.
- Utwórz konto usługi Azure Key Vault, które hostuje certyfikat urzędu certyfikacji zawierający klucze publiczne.
- Dodaj przypisanie roli w usłudze Azure Key Vault dla tożsamości zarządzanej przestrzeni nazw.
- Konfigurowanie niestandardowych ustawień uwierzytelniania w przestrzeni nazw usługi Event Grid
- 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 podźródła
Postępuj zgodnie z instrukcjami z przewodnika Szybki start: publikowanie i subskrybowanie komunikatów MQTT w przestrzeni nazw usługi Event Grid za pomocą witryny Azure Portal w celu utworzenia przestrzeni nazw i skonfigurowania jej podźródła. Pomiń kroki tworzenia certyfikatu i klienta, ponieważ tożsamości klienta pochodzą z podanego tokenu. Atrybuty klienta są oparte na oświadczeniach niestandardowych w tokenie klienta. Atrybuty klienta są używane w zapytaniu grupy klienta, zmiennych szablonu tematu i konfiguracji wzbogacania routingu.
Włączanie tożsamości zarządzanej w przestrzeni nazw usługi Event Grid
Przestrzeń nazw używa tożsamości zarządzanej do uzyskiwania dostępu do wystąpienia usługi Azure Key Vault w celu uzyskania certyfikatu serwera dla domeny niestandardowej. 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 witryny Azure Portal, zobacz Włączanie tożsamości zarządzanej dla przestrzeni nazw usługi Event Grid.
Tworzenie konta usługi Azure Key Vault i przekazywanie certyfikatu serwera
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 "centraluseaup"
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 alternatywnej nazwie podmiotu dla systemu DNS. Aby uzyskać więcej informacji, zobacz Samouczek: importowanie certyfikatu w usłudze Azure Key Vault.
Dodawanie przypisania roli w usłudze Azure Key Vault dla tożsamości zarządzanej przestrzeni nazw
Aby uzyskać dostęp do konta usługi Azure Key Vault, musisz zapewnić dostęp do przestrzeni nazw, wykonując następujące kroki:
Pobierz identyfikator podmiotu zabezpieczeń tożsamości zarządzanej systemu przestrzeni nazw usługi Event Grid przy użyciu następującego polecenia
$principalId=(az eventgrid namespace show --resource-group <resource group name> --name <namespace name> --query identity.principalId -o tsv)
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)
Dodaj przypisanie roli w usłudze Key Vault dla tożsamości zarządzanej 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 niestandardowych ustawień uwierzytelniania w przestrzeni nazw usługi Event Grid
W tym kroku skonfigurujesz niestandardowe ustawienia uwierzytelniania w przestrzeni nazw usługi Event Grid przy użyciu witryny Azure Portal i interfejsu wiersza polecenia platformy Azure. Najpierw należy utworzyć przestrzeń nazw, a następnie zaktualizować ją, wykonując następujące kroki.
Korzystanie z witryny Azure Portal
Przejdź do przestrzeni nazw usługi Event Grid w witrynie Azure Portal.
Na stronie Przestrzeń nazw usługi Event Grid wybierz pozycję Konfiguracja w menu po lewej stronie.
W sekcji Uwierzytelnianie niestandardowe JWT określ wartości następujących właściwości:
Wybierz pozycję Włącz niestandardowe uwierzytelnianie JWT.
Wystawca tokenu: wprowadź wartość oświadczeń wystawcy tokenów JWT przedstawionych przez klientów MQTT.
Wybierz pozycję Dodaj certyfikat wystawcy
Na nowej stronie określ wartości dla następujących właściwości.
Adres URL certyfikatu: identyfikator certyfikatu wystawcy w utworzonej usłudze Azure Key Vault. Zamiast tego możesz wybrać pozycję Wybierz certyfikat przy użyciu magazynu kluczy, aby wybrać certyfikat i magazyn kluczy z subskrypcji.
Tożsamość: tożsamość używana do uwierzytelniania w usłudze Key Vault w celu uzyskania dostępu do utworzonego certyfikatu wystawcy.
Wybierz Dodaj.
Po powrocie na stronę Konfiguracja wybierz pozycję Zastosuj.
Uwaga
Do celów rotacji certyfikatów/kluczy można dodać maksymalnie dwa
iss
certyfikaty.
Interfejs 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/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\"}}]}}'
Format tokenu internetowego JSON
Tokeny sieci Web Json są podzielone na sekcje nagłówka JWT i ładunku JWT.
Nagłówek JWT
Nagłówek musi zawierać co najmniej typ
pola i 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 JWT
Usługa Event Grid wymaga następujących oświadczeń: iss
, , sub
aud
, exp
, nbf
.
Nazwa/nazwisko | opis |
---|---|
iss |
Emitenta. Wartość w usłudze JWT musi być zgodna z wystawcą w konfiguracji przestrzeni nazw usługi Event Grid na potrzeby niestandardowego uwierzytelniania JWT. |
sub |
Temat. Wartość jest używana jako nazwa tożsamości uwierzytelniania. |
aud |
Audiencja. Wartość może być ciągiem lub tablicą 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). Odbiorcy mogą zawierać inne ciągi, ale dla tej przestrzeni nazw wymagamy, 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. Czas jednostki, kiedy JWT staje się prawidłowy. |
Usługa Event Grid mapuje wszystkie oświadczenia na atrybuty klienta, jeśli mają jeden z następujących typów: int32
, , string
array of strings
. Oświadczenia iss
standardowe , , sub
aud
, exp
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 strings
incorrect_attr_1
, incorrect_attr_2
, incorrect_attr_3
nie są konwertowane na atrybuty klienta, ponieważ mają nieprawidłowe 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"
}
}