Partager via


S’authentifier avec des espaces de noms à l’aide de JSON Web Tokens

Cet article montre comment authentifier avec un espace de noms Azure Event Grid en utilisant des JSON Web Tokens.

MQTT broker d'Azure Event Grid prend en charge l'authentification JWT personnalisée, qui permet aux clients de se connecter et de s'authentifier auprès d'un espace de noms Event Grid à l'aide de JSON Web Token émis par n'importe quel fournisseur d'identité, à l'exception de Microsoft Entra ID.

Prérequis

Pour utiliser l’authentification JWT personnalisée pour les espaces de noms, vous devez disposer des conditions préalables suivantes :

  • Fournisseur d’identité qui peut émettre des Json Web Tokens.
  • Certificat d’autorité de certification qui inclut vos clés publiques utilisées pour valider les jetons clients.
  • Compte Azure Key Vault pour héberger le certificat d’autorité de certification qui inclut vos clés publiques.

Étapes générales

Pour utiliser une authentification JWT personnalisée pour des espaces de noms, suivez ces étapes :

  1. Créez un espace de noms et configurez ses sous-ressources.
  2. Activez l’identité managée sur votre espace de noms Event Grid.
  3. Créez un compte Azure Key Vault qui héberge le certificat d’autorité de certification qui inclut vos clés publiques.
  4. Ajoutez l’attribution de rôle dans Azure Key Vault pour l’identité managée de l’espace de noms.
  5. Configurer des paramètres d’authentification personnalisée sur votre espace de noms Event Grid
  6. 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.

Créer un compte Azure Key Vault et charger votre certificat de serveur

  1. 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 "centraluseaup" 
    
  2. 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 :

  1. 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) 
    
  2. 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) 
    
  3. 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 $keyVaultResourceId 
    

    Pour 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.

Configurer des paramètres d’authentification personnalisée sur votre espace de noms Event Grid

Dans cette étape, vous allez configurer des paramètres d’authentification 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

  1. Accédez à votre espace de noms Event Grid dans le Portail Azure.

  2. Dans la page espace de noms Event Grid, sélectionnez Configuration dans le menu de gauche.

  3. Dans la section authentification JWT personnalisée, spécifiez les valeurs des propriétés suivantes :

    1. Sélectionnez Activer l’authentification JWT personnalisée.

    2. Émetteur de jeton: entrez la valeur des revendications de l’émetteur des jetons JWT, présentées par les clients MQTT.

    3. Sélectionnez Ajouter un certificat d’émetteur

      Capture d’écran montrant la section d’authentification JWT personnalisée de la page Configuration d’un espace de noms Event Grid.

    4. Dans la nouvelle page, spécifiez les valeurs des propriétés suivantes.

      1. 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.

      2. Identité: identité utilisée pour s’authentifier auprès de Key Vault pour accéder au certificat émetteur créé.

      3. Sélectionnez Ajouter.

        Capture d’écran montrant la page Ajouter un certificat émetteur.

  4. 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/69f9e5ac-ca07-42cc-98d2-4718d033bcc5/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 JSON Web Token

Json Web Tokens sont divisés en sections de charge utile En-tête JWT et 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 Description
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 peut être une chaîne ou 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"
    }
}