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:
- Vytvořte obor názvů a nakonfigurujte jeho dílčí zdroje.
- Povolte spravovanou identitu v oboru názvů Služby Event Grid.
- Vytvořte účet služby Azure Key Vault, který je hostitelem certifikátu certifikační autority, který obsahuje vaše veřejné klíče.
- Přidání přiřazení role ve službě Azure Key Vault pro spravovanou identitu oboru názvů
- Konfigurace vlastního nastavení ověřování v oboru názvů služby Event Grid
- 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
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"
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:
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)
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)
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
Na webu Azure Portal přejděte do svého oboru názvů Event Gridu.
Na stránce Event Grid Namespace vyberte v nabídce vlevo možnost Konfigurace.
V části Vlastní ověřování JWT zadejte hodnoty následujících vlastností:
Vyberte Povolit vlastní ověřování JWT.
Vystavitel tokenu: Zadejte hodnotu deklarací vystavitele tokenů JWT prezentovaných klienty MQTT.
Výběr možnosti Přidat certifikát vystavitele
Na nové stránce zadejte hodnoty následujících vlastností.
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.
Identita: identita použitá k ověření ve službě Key Vault pro přístup k vytvořenému certifikátu vystavitele.
Vyberte Přidat.
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 RS256
vž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 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 strings
string
. Standardní deklarace identity iss
, , sub
, nbf
aud
exp
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_list_attr
protože mají správné typy int32
, string
, array of strings
str_attr
. incorrect_attr_1
, incorrect_attr_2
incorrect_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"
}
}