Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Cet article explique comment s’authentifier auprès de l’espace de noms Azure Event Grid à l’aide de jetons web JSON OAuth 2.0.
Le répartiteur MQTT d’Azure Event Grid prend en charge l’authentification JWT OAuth 2.0, qui permet aux clients de se connecter et de s’authentifier auprès d’un espace de noms Event Grid à l’aide de jetons web JSON émis par n’importe quel fournisseur d’identité, en dehors de l’ID Microsoft Entra.
Prérequis
Pour utiliser l’authentification JWT OAuth 2.0 pour les espaces de noms, vous devez disposer des conditions préalables suivantes :
- Fournisseur d’identité qui peut émettre des jetons web JSON.
- Certificat d’autorité de certification qui inclut vos clés publiques utilisées pour valider les jetons clients (Coffre de clés) ou le fichier PEM de vos certificats de clé publique (chargement direct).
Étapes générales
Pour utiliser l’authentification JWT OAuth 2.0 pour les espaces de noms, procédez comme suit :
Créez un espace de noms et configurez ses sous-ressources.
Activez l’identité managée sur votre espace de noms Event Grid.
Configurez les paramètres d’authentification OAuth 2.0 sur votre espace de noms Event Grid en procédant comme suit :
- Créez un compte Azure Key Vault qui héberge le certificat d’autorité de certification qui inclut vos clés publiques et ajoutez l’attribution de rôle dans Key Vault pour l’identité managée de l’espace de noms.
- Vous pouvez également charger dans le namespace le fichier PEM de vos certificats de clé publique.
Vos clients peuvent se connecter à l’espace de noms Event Grid en utilisant les jetons fournis par votre fournisseur d’identité.
Créez un espace de noms et configurez ses sous-ressources
Suivez les instructions de Démarrage rapide : Publier et s’abonner aux messages MQTT sur l’espace de noms Event Grid avec le portail Azure pour créer un espace de noms et configurer ses sous-ressources. Ignorez les étapes de création du certificat et du client à mesure que les identités clientes proviennent du jeton fourni. Les attributs client sont basés sur les revendications personnalisées dans le jeton client. Les attributs clients sont utilisés dans la requête de groupe client, les variables de modèle de rubrique et la configuration d’enrichissement du routage.
Activer l’identité managée sur votre espace de noms Event Grid
L’espace de noms utilise l’identité managée pour accéder à votre instance Azure Key Vault, pour obtenir le certificat de serveur de votre domaine personnalisé. Utilisez la commande suivante pour activer l’identité managée attribuée par le système sur votre espace de noms Event Grid :
az eventgrid namespace update --resource-group <resource group name> --name <namespace name> --identity "{type:systemassigned}"
Pour plus d’informations sur la configuration des identités système et attribuées par l’utilisateur en utilisant le Portail Azure, consultez Activer l’identité managée pour un espace de noms Event Grid.
Configurer les paramètres d’authentification JWT OAuth 2.0 sur votre espace de noms Event Grid -Key Vault
Tout d’abord, créez un compte Azure Key Vault, chargez votre certificat de serveur et attribuez à l’identité managée de l’espace de noms un rôle approprié sur le coffre de clés. Ensuite, vous configurez des paramètres d’authentification personnalisés sur votre espace de noms Event Grid à l’aide du portail Azure ou d’Azure CLI. Vous devez d’abord créer l’espace de noms, puis le mettre à jour en procédant comme suit.
Créer un compte Azure Key Vault et charger votre certificat de serveur
Utilisez la commande suivante pour créer un compte Azure Key Vault :
az keyvault create --name "<your-unique-keyvault-name>" --resource-group "<resource group name>" --location "centraluseuap"Utilisez la commande suivante pour importer un certificat dans votre Azure Key Vault
az keyvault certificate import --vault-name "<your-key-vault-name>" -n "<cert name>" -f "<path to your certificate pem file> "Remarque
Votre certificat doit inclure le nom de domaine dans le Subject Alternative Name (SAN) pour DNS. Pour plus d’informations, consultez Tutoriel : Importation d’un certificat dans Azure Key Vault.
Ajouter une attribution de rôle dans Azure Key Vault pour l’identité managée de l’espace de noms
Vous devez fournir un accès à l’espace de noms pour accéder à votre compte Azure Key Vault en procédant comme suit :
Obtenez l’ID du principal d’identité managée par le système de l’espace de noms Event Grid en utilisant de la commande suivante
$principalId=(az eventgrid namespace show --resource-group <resource group name> --name <namespace name> --query identity.principalId -o tsv)Obtenez l’ID de votre ressource Azure Key Vault.
$keyVaultResourceId=(az keyvault show --resource-group <resource group name> --name <your key vault name> --query id -o tsv)Ajoutez l’attribution de rôle dans Key Vault pour l’identité managée de l’espace de noms.
az role assignment create --role "Key Vault Certificate User" --assignee $principalId --scope $keyVaultResourceIdPour plus d’informations sur l’accès à Key Vault et l’expérience du portail, consultez Fournir un accès aux clés, certificats et secrets Key Vault avec un contrôle d’accès en fonction du rôle Azure.
Utiliser le portail Azure pour configurer l’authentification
Accédez à votre espace de noms Event Grid dans le Portail Azure.
Dans la page espace de noms Event Grid, sélectionnez Configuration dans le menu de gauche.
Dans la section authentification JWT personnalisée, spécifiez les valeurs des propriétés suivantes :
Sélectionnez Activer l’authentification JWT personnalisée.
Émetteur de jeton : entrez la valeur des revendications de l’émetteur des JWT, présentées par les clients MQTT.
Pour le certificat émetteur, sélectionnez À partir d’Azure Key Vault.
Dans la nouvelle page, spécifiez les valeurs des propriétés suivantes.
URL de certificat: identificateur de certificat du certificat émetteur dans Azure Key Vault que vous avez créé. Vous pouvez choisir Sélectionner un certificat en utilisant un coffre de clés pour sélectionner le certificat et le coffre de clés depuis vos abonnements.
Identité: identité utilisée pour s’authentifier auprès de Key Vault pour accéder au certificat émetteur créé.
Sélectionnez Ajouter.
Dans la page Configuration, sélectionnez Appliquer.
Remarque
Vous pouvez ajouter jusqu’à deux certificats
issà des fins de rotation de certificat/clé.
Utiliser l’interface de ligne de commande Microsoft Azure
Utilisez la commande suivante pour mettre à jour votre espace de noms avec la configuration d’authentification JWT personnalisée.
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 JSON Web Token
Les jetons Web JSON doivent comporter des sections d'en-tête JWT, de charge utile JWT et de signature JWT.
En-tête JWT
L’en-tête doit contenir au moins typ et alg champs.
typ doit toujours être JWS et alg doit toujours être RS256. L’en-tête de jeton doit être le suivant :
{
"typ": "JWT",
"alg": "RS256"
}
Charge utile JWT
Event Grid nécessite les revendications suivantes : iss, sub, aud, exp, nbf.
| Nom | Descriptif |
|---|---|
iss |
Émetteur. La valeur dans JWT doit correspondre à l’émetteur dans la configuration de l’espace de noms Event Grid pour l’authentification JWT personnalisée. |
sub |
Objet. La valeur est utilisée comme nom d’identité d’authentification. |
aud |
Audience. La valeur est un tableau de chaînes. La valeur doit contenir un nom d’hôte d’espace de noms Event Grid standard et/ou un domaine personnalisé pour cet espace de noms Event Grid (s’il est configuré). L’audience peut contenir d’autres chaînes, mais nous avons besoin d’au moins l’une de ces chaînes pour être un nom d’hôte d’espace de noms Event Grid standard ou un domaine personnalisé pour cet espace de noms. |
exp |
Expiration. Heure Unix à laquelle JWT expire. |
nbf |
Pas avant. Heure d’unité lorsque JWT devient valide. |
Event Grid mappe toutes les revendications aux attributs clients s’ils ont l’un des types suivants : int32, string, array of strings. Les revendications standard iss, sub, aud, exp, nbf sont exclues des attributs clients. Dans l’exemple JWT suivant, seules trois revendications sont converties en attributs clients, num_attr, str_attr, str_list_attr, car elles ont des types corrects int32, string, array of strings.
incorrect_attr_1, incorrect_attr_2, incorrect_attr_3 ne sont pas convertis en attributs clients, car ils ont des types incorrects : 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"
}
}
Configurer les paramètres d’authentification JWT OAuth 2.0 sur votre espace de noms Event Grid - Chargement direct
Dans cette étape, vous allez configurer des paramètres d’authentification JWT personnalisés sur votre espace de noms Event Grid à l’aide du portail Azure et d’Azure CLI. Vous devez d’abord créer l’espace de noms, puis le mettre à jour en procédant comme suit.
Utiliser le portail Azure
- Accédez à votre espace de noms Event Grid dans le portail Azure.
- Dans la page Espace de noms Event Grid, sélectionnez Configuration dans le menu de gauche.
- Dans la section Authentification JWT personnalisée, spécifiez les valeurs des propriétés suivantes :
- Dans la nouvelle page, spécifiez les valeurs des propriétés suivantes.
- Dans la page Configuration, sélectionnez Appliquer.
Utiliser l’interface de ligne de commande Microsoft Azure
Utilisez la commande suivante pour mettre à jour votre espace de noms avec la configuration de l’authentification JWT OAuth 2.0.
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-----"
}
]
}
- Remplacez
<resource-group-name>, ,<namespace-name><location>,<key-vault-name>, et<certificate-name><certificate-in-PEM-format>par vos valeurs réelles. - La valeur encodedCertificate doit inclure le certificat complet et la clé publique au format PEM, y compris les en-têtes (
"-----BEGIN CERTIFICATE-----", "-----END CERTIFICATE----, ``-----BEGIN PUBLIC KEY----- and -----END PUBLIC KEY-----). - Vérifiez que le certificat de clé publique fourni est valide et approuvé par votre fournisseur d’identité.
- Mettez régulièrement à jour les encodedIssuerCertificates en cas de rotation ou d’expiration des certificats.
Format JSON Web Token
Les jetons Web JSON doivent comporter des sections d'en-tête JWT, de charge utile JWT et de signature JWT.
Event Grid nécessite les revendications suivantes : iss, sub, aud, exp, nbf.
-
kidest facultatif. S’il est présent, le certificat avec correspondancekidest utilisé pour la validation. - Liste des revendications standard qui ne sont pas utilisées en tant qu’attributs -
iss, ,subaud,exp,nbf, ,iat, .jti - Toutes les revendications qui ont un type de données correct (nombre qui correspond à int32, chaîne, tableau de chaînes) sont utilisées comme attributs. Dans l’exemple
num_attr_pos,num_attr_neg, lesstr_attrstr_list_attrrevendications ont des types de données corrects et sont utilisées comme attributs. - Dans l’exemple
bool_attr,num_attr_to_big, lesnum_attr_floatobj_attrrevendications ont des types de données incorrects et ne sont pas utilisées comme attributs.
{
"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"
}
}