Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt beschreven hoe u verifieert met azure Event Grid-naamruimte met behulp van JSON-webtokens.
De MQTT-broker van Azure Event Grid ondersteunt aangepaste JWT-verificatie, waarmee clients verbinding kunnen maken en verifiëren met een Event Grid-naamruimte met behulp van JSON-webtokens die worden uitgegeven door een id-provider, afgezien van Microsoft Entra-id.
Als u aangepaste JWT-verificatie voor naamruimten wilt gebruiken, moet u beschikken over de volgende vereisten:
- Id-provider die JSON-webtokens kan uitgeven.
- CA-certificaat dat uw openbare sleutels bevat die worden gebruikt om de clienttokens te valideren.
- Azure Key Vault-account voor het hosten van het CA-certificaat dat uw openbare sleutels bevat.
Als u aangepaste JWT-verificatie voor naamruimten wilt gebruiken, voert u de volgende stappen uit:
- Maak een naamruimte en configureer de bijbehorende subresources.
- Schakel beheerde identiteit in uw Event Grid-naamruimte in.
- Maak een Azure Key Vault-account dat als host fungeert voor het CA-certificaat dat uw openbare sleutels bevat.
- Voeg roltoewijzing toe in Azure Key Vault voor de beheerde identiteit van de naamruimte.
- Aangepaste verificatie-instellingen configureren in uw Event Grid-naamruimte
- Uw clients kunnen verbinding maken met de Event Grid-naamruimte met behulp van de tokens van uw id-provider.
Volg de instructies uit Quickstart: Publiceren en abonneren op MQTT-berichten in de Event Grid-naamruimte met de Azure Portal om een naamruimte te maken en de bijbehorende subresources te configureren. Sla de stappen voor het maken van het certificaat en de client over, omdat de clientidentiteiten afkomstig zijn van het opgegeven token. Clientkenmerken zijn gebaseerd op de aangepaste claims in het clienttoken. De clientkenmerken worden gebruikt in de clientgroepquery, onderwerpsjabloonvariabelen en routeringsverrijkingsconfiguratie.
De naamruimte maakt gebruik van de beheerde identiteit voor toegang tot uw Azure Key Vault-exemplaar om het servercertificaat voor uw aangepaste domein op te halen. Gebruik de volgende opdracht om door het systeem toegewezen beheerde identiteit in te schakelen in uw Event Grid-naamruimte:
az eventgrid namespace update --resource-group <resource group name> --name <namespace name> --identity "{type:systemassigned}"
Voor informatie over het configureren van systeem- en door de gebruiker toegewezen identiteiten met behulp van de Azure Portal, zie Beheerde identiteit inschakelen voor een Event Grid-naamruimte.
Gebruik de volgende opdracht om een Azure Key Vault-account te maken:
az keyvault create --name "<your-unique-keyvault-name>" --resource-group "<resource group name>" --location "centraluseuap"
Gebruik de volgende opdracht om een certificaat te importeren in Azure Key Vault
az keyvault certificate import --vault-name "<your-key-vault-name>" -n "<cert name>" -f "<path to your certificate pem file> "
Notitie
Uw certificaat moet de domeinnaam in de alternatieve onderwerpnaam voor DNS bevatten. Zie Zelfstudie: Een certificaat importeren in Azure Key Vault voor meer informatie.
U moet toegang tot de naamruimte opgeven voor toegang tot uw Azure Key Vault-account met behulp van de volgende stappen:
Haal de principaal-ID van een door het systeem beheerde identiteit voor de Event Grid-naamruimte op met behulp van de volgende opdracht.
$principalId=(az eventgrid namespace show --resource-group <resource group name> --name <namespace name> --query identity.principalId -o tsv)
Haal uw Azure Key Vault-resource-id op.
$keyVaultResourceId=(az keyvault show --resource-group <resource group name> --name <your key vault name> --query id -o tsv)
Voeg roltoewijzing toe in Key Vault voor de beheerde identiteit van de naamruimte.
az role assignment create --role "Key Vault Certificate User" --assignee $principalId --scope $keyVaultResourceId
Zie Toegang tot Key Vault-sleutels, -certificaten en -geheimen bieden met een op rollen gebaseerd toegangsbeheer van Azure voor meer informatie over toegang tot Key Vault en de portal.
In deze stap configureert u aangepaste verificatie-instellingen voor uw Event Grid-naamruimte met behulp van Azure Portal en Azure CLI. U moet eerst de naamruimte maken en deze vervolgens bijwerken met behulp van de volgende stappen.
Navigeer naar uw Event Grid-naamruimte in Azure Portal.
Selecteer Configuratie in het linkermenu op de pagina Event Grid-naamruimte.
Geef in de sectie Aangepaste JWT-verificatie waarden op voor de volgende eigenschappen:
Selecteer Aangepaste JWT-verificatie inschakelen.
Tokenverlener: voer de waarde in van de claims van de uitgever van de JWTs, gepresenteerd door de MQTT-clients.
Selecteer Uitgevende certificaat toevoegen
Geef op de nieuwe pagina waarden op voor de volgende eigenschappen.
Certificaat-URL: de certificaat-id van het certificaat van de uitgever in Azure Key Vault dat u hebt gemaakt. U kunt er ook voor kiezen om een certificaat te selecteren met behulp van een sleutelkluis en zo het certificaat en de sleutelkluis uit uw abonnementen selecteren.
Identiteit: de identiteit die wordt gebruikt voor verificatie met de Key Vault voor toegang tot het certificaat van de verlener dat is gemaakt.
Selecteer Toevoegen.
Ga terug naar de Configuratie-pagina en selecteer Toepassen.
Notitie
U kunt maximaal twee
iss
certificaten toevoegen voor certificaat-/sleutelrotatiedoeleinden.
Gebruik de volgende opdracht om uw naamruimte bij te werken met de aangepaste JWT-verificatieconfiguratie.
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\"
}
}
]
}
}'
JSON-webtokens zijn onderverdeeld in de secties JWT-header en JWT-nettolading.
De koptekst moet ten minste de velden typ
en alg
bevatten.
typ
moet altijd zijn JWS
en alg
altijd moeten zijn RS256
. De token-header moet als volgt zijn:
{
"typ": "JWT",
"alg": "RS256"
}
Event Grid vereist de volgende claims: iss
, sub
, aud
, exp
, . nbf
Naam | Beschrijving |
---|---|
iss |
Uitgevende instelling. De waarde in JWT moet overeenkomen met de verlener in de Event Grid-naamruimteconfiguratie voor aangepaste JWT-verificatie. |
sub |
Onderwerp. Waarde wordt gebruikt als verificatie-id-naam. |
aud |
Audiëntie. Waarde kan een tekenreeks of een matrix met tekenreeksen zijn. De waarde moet de hostnaam van de Standaard Event Grid-naamruimte en/of het aangepaste domein voor die Event Grid-naamruimte bevatten (indien geconfigureerd). Doelgroep kan andere tekenreeksen bevatten, maar we vereisen dat ten minste één van deze tekenreeksen een standaard Event Grid-naamruimtehostnaam of aangepast domein voor deze naamruimte is. |
exp |
Vervaldatum. Unix-tijd waarop JWT verloopt. |
nbf |
Niet eerder. Eenheidstijd wanneer JWT geldig wordt. |
Event Grid wijst alle claims toe aan clientkenmerken als ze een van de volgende typen hebben: int32
, string
, array of strings
. Standaardclaims iss
, sub
, aud
, exp
worden nbf
uitgesloten van klantkenmerken. In het volgende JWT-voorbeeld worden slechts drie claims geconverteerd naar clientkenmerken, num_attr
, , str_attr
, str_list_attr
omdat ze de juiste typen int32
, string
, . array of strings
incorrect_attr_1
, incorrect_attr_2
worden incorrect_attr_3
niet geconverteerd naar clientkenmerken, omdat ze verkeerde typen hebben: 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"
}
}