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.
S’applique à :
Locataires externes (en savoir plus)
L’ID externe Microsoft Entra prend en charge deux types d’authentification pour les applications clientes confidentielles ; Authentification par mot de passe (par exemple, clé secrète client) et authentification basée sur un certificat. Pour un niveau de sécurité plus élevé, nous vous recommandons d’utiliser un certificat (au lieu d’un secret client) comme informations d’identification dans vos applications clientes confidentielles.
En production, vous devez acheter un certificat signé par une autorité de certification connue, puis utiliser Azure Key Vault pour gérer l’accès aux certificats et la durée de vie. Toutefois, à des fins de test, vous pouvez créer un certificat auto-signé et configurer vos applications pour qu’elles l’utilisent pour l’authentification.
Dans cet article, vous allez apprendre à générer un certificat auto-signé à l’aide d’Azure Key Vault sur le portail Azure, OpenSSL ou PowerShell. Si vous avez déjà une clé secrète client, vous allez apprendre à la supprimer en toute sécurité.
Si nécessaire, vous pouvez également créer un certificat auto-signé par programmation à l’aide de .NET, Node.js, Go, Python ou des bibliothèques clientes Java .
Conditions préalables
Visual Studio Code ou un autre éditeur de code.
Un locataire externe. Si vous n’en avez pas encore, inscrivez-vous à un essai gratuit.
OpenSSL ou vous pouvez facilement installer OpenSSL dans Windows via Chocolatey.
Abonnement Windows PowerShell ou Azure.
Créer un certificat auto-signé
Si vous disposez d’un certificat auto-signé existant sur votre ordinateur local, vous pouvez ignorer cette étape, puis continuer à charger le certificat dans votre inscription d’application.
Vous pouvez utiliser Azure Key Vault pour générer un certificat auto-signé pour votre application. En utilisant Azure Key Vault, vous bénéficiez d’avantages comme l’attribution d’une autorité de certification partenaire et l’automatisation de la permutation des certificats.
Si vous disposez d’un certificat auto-signé existant dans Azure Key Vault et que vous souhaitez l’utiliser sans le télécharger, ignorez cette étape, puis passez à utiliser un certificat auto-signé directement à partir d’Azure Key Vault. Sinon, utilisez les étapes suivantes pour générer votre certificat
Suivez les étapes décrites dans Définir et récupérer un certificat à partir d’Azure Key Vault à l’aide du portail Azure pour créer et télécharger votre certificat.
Après avoir créé votre certificat, téléchargez le fichier .cer et le fichier .pfx tel que ciam-client-app-cert.cer et ciam-client-app-cert.pfx. Le fichier .cer contient la clé publique et correspond à ce que vous chargez dans votre centre d’administration Microsoft Entra.
Dans votre terminal, exécutez la commande suivante pour extraire la clé privée du fichier .pfx . Lorsque vous êtes invité à taper une phrase de passe, appuyez simplement sur Entrée si vous ne souhaitez pas en définir une. Sinon, tapez une phrase secrète de votre choix :
openssl pkcs12 -in ciam-client-app-cert.pfx -nocerts -out ciam-client-app-cert.keyLe fichier ciam-client-app-cert.key est ce que vous utilisez dans votre application.
Charger le certificat dans votre inscription d’application
Pour utiliser votre certificat d’application cliente, vous devez associer l’application que vous avez inscrite dans le centre d’administration Microsoft Entra au certificat :
Connectez-vous au Centre d’administration Microsoft Entra en tant qu’administrateur d’application au moins.
Si vous avez accès à plusieurs locataires, utilisez l’icône
Paramètres dans le menu supérieur pour basculer vers votre locataire externe à partir du menu Répertoires + abonnements.Accédez à Entra ID>enregistrements d'applications.
Dans la liste d’inscriptions d’application, sélectionnez l’application que vous souhaitez associer au certificat, par exemple ciam-client-app.
Sous Gérer, sélectionnez Certificats et secrets.
Sélectionnez Certificats, puis chargez le certificat.
Sélectionnez l’icône Sélectionner un fichier de fichier , puis sélectionnez le certificat que vous souhaitez charger, tel que ciam-client-app-cert.pem ou ciam-client-app-cert.cer ou ciam-client-app-cert.crt.
Pour Description, tapez une description, telle que le certificat d’application cliente CIAM, puis sélectionnez Ajouter pour charger votre certificat. Une fois le certificat téléchargé, l’empreinte, la date de début et la date d'expiration sont affichées.
Enregistrez la valeur de l’empreinte numérique à utiliser ultérieurement lorsque vous configurez votre application cliente.
Si vous avez déjà une clé secrète client en place pour votre application, vous devez la supprimer pour éviter qu’une application malveillante s’approprie l’identité de votre application :
- Accédez à l’onglet Secrets client , puis sélectionnez l’icône Supprimer .
- Dans la fenêtre contextuelle qui s’affiche, sélectionnez Oui.
Configurer votre application Node.js pour utiliser un certificat
Une fois que vous avez associé votre inscription d’application au certificat, vous devez mettre à jour le code de votre application pour commencer à utiliser le certificat :
Recherchez le fichier qui contient votre objet de configuration MSAL, tel que
msalConfigdans authConfig.js, puis mettez-le à jour pour qu’il ressemble au code suivant. Si un secret client est présent, veillez à le supprimer :require('dotenv').config(); const fs = require('fs'); //// import the fs module for reading the key file const crypto = require('crypto'); const TENANT_SUBDOMAIN = process.env.TENANT_SUBDOMAIN || 'Enter_the_Tenant_Subdomain_Here'; const REDIRECT_URI = process.env.REDIRECT_URI || 'http://localhost:3000/auth/redirect'; const POST_LOGOUT_REDIRECT_URI = process.env.POST_LOGOUT_REDIRECT_URI || 'http://localhost:3000'; const privateKeySource = fs.readFileSync('PATH_TO_YOUR_PRIVATE_KEY_FILE') const privateKeyObject = crypto.createPrivateKey({ key: privateKeySource, passphrase: 'Add_Passphrase_Here', format: 'pem' }); const privateKey = privateKeyObject.export({ format: 'pem', type: 'pkcs8' }); /** * Configuration object to be passed to MSAL instance on creation. * For a full list of MSAL Node configuration parameters, visit: * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-node/docs/configuration.md */ const msalConfig = { auth: { clientId: process.env.CLIENT_ID || 'Enter_the_Application_Id_Here', // 'Application (client) ID' of app registration in Azure portal - this value is a GUID authority: process.env.AUTHORITY || `https://${TENANT_SUBDOMAIN}.ciamlogin.com/`, clientCertificate: { thumbprint: "YOUR_CERT_THUMBPRINT", // replace with thumbprint obtained during step 2 above privateKey: privateKey } }, //... Rest of code in the msalConfig object }; module.exports = { msalConfig, REDIRECT_URI, POST_LOGOUT_REDIRECT_URI, TENANT_SUBDOMAIN };Dans votre code, remplacez les espaces réservés :
Add_Passphrase_Herepar la phrase secrète que vous avez utilisée pour chiffrer votre clé privée.YOUR_CERT_THUMBPRINTavec la valeur d’empreinte que vous avez enregistrée précédemment.PATH_TO_YOUR_PRIVATE_KEY_FILEpar le chemin de votre fichier de clé privée.Enter_the_Application_Id_Herepar l’ID d’application (client) de l’application que vous avez enregistrée précédemment.Enter_the_Tenant_Subdomain_Hereet remplacez-le par le sous-domaine (locataire) du répertoire. Par exemple, si le domaine principal de votre locataire estcontoso.onmicrosoft.com, utilisezcontoso. Si vous n’avez pas de nom de locataire, découvrez comment lire les détails de votre locataire.
Comme nous avons chiffré la clé (nous vous recommandons d’en faire autant), nous devons la déchiffrer avant de la passer à l’objet de configuration MSAL.
//... const privateKeyObject = crypto.createPrivateKey({ key: privateKeySource, passphrase: 'Add_Passphrase_Here', format: 'pem' }); const privateKey = privateKeyObject.export({ format: 'pem', type: 'pkcs8' }); //...Utilisez les étapes de l’exécution et testez l’application web pour tester votre application.
Utiliser un certificat auto-signé directement à partir d’Azure Key Vault
Vous pouvez utiliser votre certificat existant directement à partir d’Azure Key Vault :
Recherchez le fichier qui contient votre objet de configuration MSAL, par
msalConfigexemple dans authConfig.js, puis supprimez laclientSecretpropriété :const msalConfig = { auth: { clientId: process.env.CLIENT_ID || 'Enter_the_Application_Id_Here', // 'Application (client) ID' of app registration in Azure portal - this value is a GUID authority: process.env.AUTHORITY || `https://${TENANT_SUBDOMAIN}.ciamlogin.com/`, }, //... };Installez Azure CLI, puis sur votre console, tapez la commande suivante pour vous connecter :
az login --tenant YOUR_TENANT_IDRemplacez l’espace réservé
YOUR_TENANT_IDpar l’ID d’annuaire (locataire) que vous avez copié précédemment.Dans votre console, tapez la commande suivante pour installer les packages nécessaires :
npm install --save @azure/identity @azure/keyvault-certificates @azure/keyvault-secretsDans votre application cliente, utilisez le code suivant pour générer
thumbprintetprivateKey.const identity = require("@azure/identity"); const keyvaultCert = require("@azure/keyvault-certificates"); const keyvaultSecret = require('@azure/keyvault-secrets'); const KV_URL = process.env["KEY_VAULT_URL"] || "ENTER_YOUR_KEY_VAULT_URL" const CERTIFICATE_NAME = process.env["CERTIFICATE_NAME"] || "ENTER_THE_NAME_OF_YOUR_CERTIFICATE_ON_KEY_VAULT"; // Initialize Azure SDKs const credential = new identity.DefaultAzureCredential(); const certClient = new keyvaultCert.CertificateClient(KV_URL, credential); const secretClient = new keyvaultSecret.SecretClient(KV_URL, credential); async function getKeyAndThumbprint() { // Grab the certificate thumbprint const certResponse = await certClient.getCertificate(CERTIFICATE_NAME).catch(err => console.log(err)); const thumbprint = certResponse.properties.x509Thumbprint.toString('hex') // When you upload a certificate to Key Vault, a secret containing your private key is automatically created const secretResponse = await secretClient.getSecret(CERTIFICATE_NAME).catch(err => console.log(err));; // secretResponse contains both public and private key, but we only need the private key const privateKey = secretResponse.value.split('-----BEGIN CERTIFICATE-----\n')[0] } getKeyAndThumbprint();Dans votre code, remplacez les espaces réservés :
ENTER_YOUR_KEY_VAULT_URLpar l’URL de votre coffre de clés Azure.ENTER_THE_NAME_OF_YOUR_CERTIFICATE_ON_KEY_VAULTpar le nom de votre certificat dans Azure Key Vault.
Utilisez les valeurs de
thumbprintetprivateKeypour mettre à jour votre configuration :let clientCert = { thumbprint: thumbprint, privateKey: privateKey, }; msalConfig.auth.clientCertificate = clientCert; //For this to work, you can't declares your msalConfig using const modifierEnsuite, instanciez votre client confidentiel, comme indiqué dans la méthode
getMsalInstance:class AuthProvider { //... getMsalInstance(msalConfig) { return new msal.ConfidentialClientApplication(msalConfig); } //... }Utilisez les étapes de l’exécution et testez l’application web pour tester votre application.
Contenu connexe
Découvrez comment :