Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:
Externe Mandanten (weitere Informationen)
Die externe Microsoft Entra-ID unterstützt zwei Authentifizierungstypen für vertrauliche Clientanwendungen; kennwortbasierte Authentifizierung (z. B. geheimer Clientschlüssel) und zertifikatbasierte Authentifizierung. Für eine höhere Sicherheitsstufe empfehlen wir die Verwendung eines Zertifikats (anstelle eines geheimen Clientschlüssels) als Anmeldeinformationen in Ihren vertraulichen Clientanwendungen.
In der Produktion sollten Sie ein Zertifikat erwerben, das von einer bekannten Zertifizierungsstelle signiert ist, und dann Azure Key Vault zum Verwalten des Zertifikatzugriffs und der Lebensdauer verwenden. Zu Testzwecken können Sie jedoch ein selbstsigniertes Zertifikat erstellen und Ihre Apps für die Authentifizierung konfigurieren.
In diesem Artikel erfahren Sie, wie Sie ein selbstsigniertes Zertifikat mithilfe von Azure Key Vault im Azure-Portal, OpenSSL oder PowerShell generieren. Wenn Sie bereits über einen geheimen Clientschlüssel verfügen, erfahren Sie, wie Sie ihn sicher löschen können.
Bei Bedarf können Sie ein selbstsigniertes Zertifikat auch programmgesteuert mithilfe von .NET, Node.js, Go, Python oder Java-Clientbibliotheken erstellen.
Voraussetzungen
Visual Studio Code oder ein anderer Code-Editor.
Ein externer Mieter. Wenn Sie noch keins haben, registrieren Sie sich für eine kostenlose Testversion.
OpenSSL oder Sie können OpenSSL einfach über Chocolatey in Windows installieren.
Windows PowerShell - oder Azure-Abonnement.
Erstellen eines selbstsignierten Zertifikats
Wenn Sie über ein selbstsigniertes Zertifikat auf Ihrem lokalen Computer verfügen, können Sie diesen Schritt überspringen und dann mit dem Hochladen des Zertifikats in Ihre App-Registrierung fortfahren.
Sie können Azure Key Vault verwenden, um ein selbstsigniertes Zertifikat für Ihre App zu generieren. Mithilfe von Azure Key Vault profitieren Sie von Vorteilen, z. B. dem Zuweisen einer Partnerzertifizierungsstelle (Ca) und der Automatisierung der Zertifikatrotation.
Wenn Sie über ein selbstsigniertes Zertifikat in Azure Key Vault verfügen und es verwenden möchten, ohne es herunterzuladen, überspringen Sie diesen Schritt, und fahren Sie mit der Verwendung eines selbstsignierten Zertifikats direkt aus Azure Key Vault fort. Verwenden Sie andernfalls die folgenden Schritte, um Ihr Zertifikat zu generieren.
Führen Sie die Schritte unter Festlegen und Abrufen eines Zertifikats aus Azure Key Vault mithilfe des Azure-Portals aus, um Ihr Zertifikat zu erstellen und herunterzuladen.
Nachdem Sie Ihr Zertifikat erstellt haben, laden Sie sowohl die .cer-Datei als auch die PFX-Datei wie ciam-client-app-cert.cer und ciam-client-app-cert.pfx herunter. Die .cer Datei enthält den öffentlichen Schlüssel und ist das, was Sie in Ihr Microsoft Entra Admin Center hochladen.
Führen Sie in Ihrem Terminal den folgenden Befehl aus, um den privaten Schlüssel aus der PFX-Datei zu extrahieren. Wenn Sie aufgefordert werden, eine Passphrase einzugeben, drücken Sie einfach die EINGABETASTE, falls Sie keine festlegen möchten. Geben Sie andernfalls einen Passwortsatz Ihrer Wahl ein.
openssl pkcs12 -in ciam-client-app-cert.pfx -nocerts -out ciam-client-app-cert.keyDie ciam-client-app-cert.key Datei ist das, was Sie in Ihrer App verwenden.
Hochladen des Zertifikats in Ihre App-Registrierung
Um Ihr Client-App-Zertifikat zu verwenden, müssen Sie die App, die Sie im Microsoft Entra Admin Center registriert haben, dem Zertifikat zuordnen:
Melden Sie sich mindestens als Anwendungsadministrator beim Microsoft Entra Admin Center an.
Wenn Sie Zugriff auf mehrere Mandanten haben, verwenden Sie das Symbol
"Einstellungen" im oberen Menü, um über das Menü "Verzeichnisse + Abonnements" zu Ihrem externen Mandanten zu wechseln.Navigieren Sie zu Entra ID>App-Registrierungen.
Wählen Sie in der App-Registrierungsliste die App aus, die Sie dem Zertifikat zuordnen möchten, z. B. ciam-client-app.
Wählen Sie unter "Verwalten" die Option "Zertifikate und Geheime Schlüssel" aus.
Wählen Sie "Zertifikate" und dann " Zertifikat hochladen" aus.
Wählen Sie das Symbol "Dateidatei auswählen " und dann das Zertifikat aus, das Sie hochladen möchten, z. B. ciam-client-app-cert.pem oder ciam-client-app-cert.cer oder ciam-client-app-cert.crt.
Geben Sie für "Beschreibung" eine Beschreibung ein, z. B. das CIAM-Client-App-Zertifikat, und wählen Sie dann "Hinzufügen" aus, um Ihr Zertifikat hochzuladen. Nachdem das Zertifikat hochgeladen wurde, werden die Werte "Fingerabdruck", " Startdatum" und "Ablaufdatum" angezeigt.
Notieren Sie den Fingerabdruckwert für die spätere Verwendung, wenn Sie Ihre Client-App konfigurieren.
Wenn Sie einen geheimen Clientschlüssel bereits für Ihre Anwendung eingerichtet haben, müssen Sie ihn löschen, um eine schädliche Anwendung für den Identitätswechsel Ihrer Anwendung zu vermeiden:
- Wechseln Sie zur Registerkarte "Geheime Clientschlüssel ", und wählen Sie das Symbol "Löschen " aus.
- Wählen Sie im daraufhin angezeigten Popupfenster "Ja" aus.
Konfigurieren Ihrer Node.js-App für die Verwendung des Zertifikats
Nachdem Sie die App-Registrierung mit dem Zertifikat verknüpft haben, müssen Sie den App-Code aktualisieren, um mit der Verwendung des Zertifikats zu beginnen:
Suchen Sie die Datei, die Ihr MSAL-Konfigurationsobjekt enthält, z
msalConfig. B. in authConfig.js, und aktualisieren Sie sie dann so, dass sie ähnlich wie der folgende Code aussieht. Wenn Sie über einen geheimen Clientschlüssel verfügen, stellen Sie sicher, dass Sie ihn entfernen: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 };Ersetzen Sie in Ihrem Code die Platzhalter:
Add_Passphrase_Heremit der Passphrase, die Sie zum Verschlüsseln Ihres privaten Schlüssels verwendet haben.YOUR_CERT_THUMBPRINTmit dem zuvor erfassten Fingerabdruckwert.PATH_TO_YOUR_PRIVATE_KEY_FILEmit dem Pfad zu Ihrer Datei mit dem privaten Schlüssel.Enter_the_Application_Id_Heremit der Anwendungs-ID (Client) der App, die Sie zuvor registriert haben.Enter_the_Tenant_Subdomain_Hereund ersetzen Sie es durch die Verzeichnis-(Mandanten-)Unterdomäne. Wenn Ihre primäre Mandantendomäne z. B.contoso.onmicrosoft.comist, verwenden Siecontoso. Wenn Sie nicht über Ihren Mandantennamen verfügen, erfahren Sie, wie Sie Ihre Mandantendetails lesen.
Wir haben den Schlüssel verschlüsselt (wir empfehlen, dies zu tun), daher müssen wir ihn entschlüsseln, bevor wir ihn an das MSAL-Konfigurationsobjekt übergeben.
//... const privateKeyObject = crypto.createPrivateKey({ key: privateKeySource, passphrase: 'Add_Passphrase_Here', format: 'pem' }); const privateKey = privateKeyObject.export({ format: 'pem', type: 'pkcs8' }); //...Führen Sie die Schritte in "Ausführen" aus, und testen Sie die Web-App , um Ihre App zu testen.
Verwenden eines selbstsignierten Zertifikats direkt aus Azure Key Vault
Sie können Ihr vorhandenes Zertifikat direkt aus Azure Key Vault verwenden:
Suchen Sie die Datei, die Ihr MSAL-Konfigurationsobjekt enthält, z
msalConfig. B. in authConfig.js, und entfernen Sie dann dieclientSecretEigenschaft: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/`, }, //... };Installieren Sie Azure CLI, und geben Sie dann auf der Konsole den folgenden Befehl ein, um sich anzumelden:
az login --tenant YOUR_TENANT_IDErsetzen Sie den Platzhalter
YOUR_TENANT_IDdurch die zuvor kopierte Verzeichnis-ID (Mandanten-ID).Geben Sie auf der Konsole den folgenden Befehl ein, um die erforderlichen Pakete zu installieren:
npm install --save @azure/identity @azure/keyvault-certificates @azure/keyvault-secretsVerwenden Sie in Ihrer Client-App den folgenden Code, um
thumbprintundprivateKeyzu generieren;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();Ersetzen Sie in Ihrem Code die Platzhalter:
ENTER_YOUR_KEY_VAULT_URLmit Ihrer Azure Key Vault-URL.ENTER_THE_NAME_OF_YOUR_CERTIFICATE_ON_KEY_VAULTmit dem Namen Ihres Zertifikats im Azure Key Vault.
Verwenden Sie die werte
thumbprintundprivateKey, um Ihre Konfiguration zu aktualisieren:let clientCert = { thumbprint: thumbprint, privateKey: privateKey, }; msalConfig.auth.clientCertificate = clientCert; //For this to work, you can't declares your msalConfig using const modifierFahren Sie dann mit dem Instanziieren Ihres vertraulichen Clients fort, wie in der
getMsalInstance-Methode gezeigt:class AuthProvider { //... getMsalInstance(msalConfig) { return new msal.ConfidentialClientApplication(msalConfig); } //... }Führen Sie die Schritte in "Ausführen" aus, und testen Sie die Web-App , um Ihre App zu testen.
Verwandte Inhalte
Erfahren Sie, wie Sie: