Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article explique comment vous authentifier auprès des espaces de noms Azure Event Grid en utilisant un webhook ou une fonction Azure.
L’authentification webhook permet aux points de terminaison HTTP externes (webhooks ou fonctions) d’authentifier dynamiquement les connexions Message Queuing Telemetry Transport (MQTT). Cette méthode utilise la validation du jeton web JSON Microsoft Entra ID pour garantir un accès sécurisé.
Lorsqu’un client tente de se connecter, l’agent appelle un point de terminaison HTTP défini par l’utilisateur qui valide les informations d’identification, telles que les jetons de signature d’accès partagé, les noms d’utilisateur et les mots de passe, ou même effectue des vérifications de liste de révocation de certificats. Le webhook évalue la demande et retourne une décision d’autoriser ou de refuser la connexion, ainsi que des métadonnées facultatives pour une autorisation affinée. Cette approche prend en charge des stratégies d’authentification flexibles et centralisées dans divers parcs d’appareils et cas d’usage.
Conditions préalables
- Espace de noms Event Grid avec une identité managée affectée par le système ou affectée par l’utilisateur.
- Webhook externe ou fonction Azure.
- Accès accordé à l’identité managée de l’espace de noms Event Grid à la fonction Azure ou au webhook.
Étapes de haut niveau
Pour utiliser l’authentification webhook personnalisée pour les espaces de noms, procédez comme suit :
- Créez un espace de noms et configurez ses sous-ressources.
- Activez une identité managée sur votre espace de noms Event Grid.
- Accordez à l’identité managée l’accès à votre fonction Azure ou à votre webhook.
- Configurez les paramètres de webhook personnalisé sur votre espace de noms Event Grid.
- Connectez vos clients à l’espace de noms Event Grid et faites-vous authentifier via le webhook ou la fonction.
Créez un espace de noms et configurez ses sous-ressources
Pour créer un espace de noms et configurer ses sous-ressources, suivez les instructions de Démarrage rapide : publier et s’abonner aux messages MQTT sur un espace de noms Event Grid avec le Portail Azure. Ignorez les étapes de création d’un certificat et d’un client car 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 une identité managée sur votre espace de noms Event Grid
Pour activer une identité managée affectée par le système sur votre espace de noms Event Grid, utilisez la commande suivante :
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 affectées par le système ou par l’utilisateur en utilisant le Portail Azure, consultez Activer l’identité managée pour un espace de noms Event Grid.
Accorder à l’identité managée l’accès approprié à une fonction ou à un webhook
Accordez à l’identité managée de votre espace de noms Event Grid l’accès approprié à la fonction Azure ou au webhook cible.
Pour configurer l’authentification personnalisée pour une fonction Azure, procédez comme suit.
Créer une application Microsoft Entra
Créez une application Microsoft Entra dans Microsoft Entra ID.
Dans la page Vue d’ensemble de l’application, notez la valeur de l’ID d’application (client).
Dans le menu de gauche, sélectionnez Exposer une API. À côté de ID de l'application URI, sélectionnez Ajouter.
Notez la valeur de l’URI d’ID d’application dans le volet Modifier l’URI de l’ID d’application, puis sélectionnez Enregistrer.
Configurer l’authentification pour une fonction Azure
Si vous disposez d’une fonction Azure de base créée à partir du Portail Azure, configurez l’authentification et validez le jeton Microsoft Entra ID créé en utilisant une identité managée.
Accédez votre application Azure Functions.
Dans le menu de gauche, sélectionnez Authentification, puis sélectionnez Ajouter un fournisseur d’identité.
Dans la page Ajouter un fournisseur d’identité, pour Fournisseur d’identité, sélectionnez Microsoft dans la liste déroulante.
Dans la section Inscription d’application, spécifiez les valeurs des propriétés suivantes :
Pour Audiences de jeton autorisées, ajoutez la valeur URI de l’ID d’application de l’application Microsoft Entra que vous avez notée précédemment.
Dans la section Vérifications supplémentaires, pour Développement d’applications clientes, sélectionnez Autoriser les demandes à partir d’applications clientes spécifiques.
Dans le volet Applications clientes autorisées, entrez l’ID client de l’identité managée affectée par le système utilisée pour générer le jeton. Vous trouverez cet ID dans l’application d’entreprise de la ressource Microsoft Entra ID.
Choisissez les autres paramètres en fonction de vos besoins spécifiques, puis sélectionnez Ajouter.
À présent, générez et utilisez le jeton d’ID Microsoft Entra.
- Générez un jeton Microsoft Entra ID en utilisant l’identité managée avec l’URI d’ID d’application en tant que ressources.
- Utilisez ce jeton pour appeler la fonction Azure en l’incluant dans l’en-tête de requête.
Configurer les paramètres personnalisés d’authentification webhook sur votre espace de noms Event Grid
Configurez les paramètres d’authentification webhook personnalisés sur votre espace de noms Event Grid en utilisant le Portail Azure et Azure CLI. Vous créez d’abord l’espace de noms, puis le mettez à jour.
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 webhook personnalisée, spécifiez les valeurs des propriétés suivantes :
- Type d’identité managée, sélectionnez Affectée par l’utilisateur.
- URL du webhook : saisissez la valeur du point de terminaison de l’URL où le service Event Grid envoie des demandes de webhook authentifiées à l’aide de l’identité managée spécifiée.
- URI de l’audience de jeton ; saisissez la valeur de l’ID d’application ou de l’URI Microsoft Entra pour obtenir le jeton d’accès à inclure en tant que jeton du porteur dans les demandes de remise.
- l’ID de locataire Microsoft Entra ; saisissez la valeur de l’ID de locataire Microsoft Entra utilisé pour acquérir le jeton du porteur pour la remise du webhook authentifié.
Sélectionnez Appliquer.
Utilisation de l’interface de ligne de commande Microsoft Azure
Pour mettre à jour votre espace de noms avec la configuration d’authentification webhook personnalisée, utilisez la commande suivante :
az eventgrid namespace update \
--resource-group <resource-group-name> \
--name <namespace-name> \
--api-version 2025-04-01-preview \
--identity-type UserAssigned \
--identity-user-assigned-identities "/subscriptions/XXXXXXXXXXX/resourcegroups/XXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/XXXXXXXXXXX={}" \
--set properties.isZoneRedundant=true \
properties.topicSpacesConfiguration.state=Enabled \
properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.identity.type=UserAssigned \
properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.identity.userAssignedIdentity="/subscriptions/XXXXXXXXXXX/resourcegroups/XXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/XXXXXXXXXXX" \
properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.endpointUrl="https://XXXXXXXXXXX" \
properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.azureActiveDirectoryApplicationIdOrUri="api://XXXXXXXXXXX/.default" \
properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.azureActiveDirectoryTenantId="XXXXXXXXXXX"
Remplacez <NAMESPACE_NAME> et <RESOURCE_GROUP_NAME> par vos valeurs réelles. Renseignez les espaces réservés dans l’abonnement, le groupe de ressources, l’identité, l’ID d’application, l’URL et l’ID de locataire. Pour améliorer les performances et la fiabilité de l’authentification webhook pour l’agent MQTT Event Grid, nous vous recommandons vivement d’activer la prise en charge HTTP/2 pour le point de terminaison de votre webhook.
Détails de l’API Webhook
En-têtes de requête
Autorisation : jeton du porteur
Le jeton est un jeton Microsoft Entra pour l’identité managée configurée afin d’appeler le webhook.
Charge utile de demande
{
"clientId": "<string>",
"userName": "<string>",
"password": "<base64 encoded bytes>",
"authenticationMethod": "<string>",
"authenticationData": "<base64 encoded bytes>",
"clientCertificate": "<certificate in PEM format>",
"clientCertificateChain": "<certificates from chain in PEM format>"
}
Descriptions des champs de charge utile
| Champ | Obligatoire ou facultatif | Descriptif |
|---|---|---|
clientId |
Obligatoire | ID client à partir du paquet MQTT CONNECT. |
userName |
Optionnel | Nom d’utilisateur à partir du paquet MQTT CONNECT. |
password |
Optionnel | Mot de passe du paquet MQTT CONNECT dans l’encodage Base64. |
authenticationMethod |
Optionnel | Méthode d’authentification à partir du paquet MQTT CONNECT (MQTT5 uniquement). |
authenticationData |
Optionnel | Données d’authentification du paquet MQTT CONNECT dans l’encodage Base64 (MQTT5 uniquement). |
clientCertificate |
Optionnel | Certificat client au format PEM. |
clientCertificateChain |
Optionnel | Autres certificats fournis par le client requis pour générer la chaîne du certificat client vers le certificat de l’autorité de certification. |
userProperties |
Optionnel | Propriétés utilisateur du paquet CONNECT (MQTT5 uniquement). |
Charge utile de réponse
Réponse réussie
HTTP/1.1 200 OK
Content-Type: application/json
{
"decision": "allow",
"clientAuthenticationName": "<string>",
"attributes": {
"attr": "<int/string/array_of_strings>",
...
},
"expiration": "<unix time format>"
}
Réponse refusée
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"decision": "deny",
"errorReason": "<string>"
}
Descriptions des champs de réponse
| Champ | Descriptif |
|---|---|
decision (requis) |
La décision d’authentification est soit allow, soit deny. |
clientAuthenticationName |
Nom d’authentification du client (nom d’identité). (Obligatoire quand decision est défini sur allow.) |
attributes |
Dictionnaire avec attributs. La clé est le nom de l’attribut et la valeur est un int/string/array. (Facultatif quand decision est défini sur allow.) |
expiration |
Date d’expiration au format d’heure Unix. (Facultatif quand decision est défini sur allow.) |
errorReason |
Message d’erreur si decision est défini sur deny. Cette erreur est enregistrée. (Facultatif quand decision est défini sur deny.) |
Exemples de types d’attributs pris en charge
"num_attr_pos": 1,
"num_attr_neg": -1,
"str_attr": "str_value",
"str_list_attr": [
"str_value_1",
"str_value_2"
]
Tous les types de données corrects (nombre adapté au <int32/string/array_of_strings>) sont utilisés comme attributs. Dans l’exemple, les revendications num_attr_pos, num_attr_neg, str_attret str_list_attr ont des types de données corrects et sont utilisés comme attributs.