Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: Pracownicy dzierżawcy
Dzierżawy zewnętrzne (dowiedz się więcej)
Identyfikator zewnętrzny firmy Microsoft obsługuje dwa typy uwierzytelniania dla poufnych aplikacji klienckich; Uwierzytelnianie oparte na hasłach (takie jak klucz tajny klienta) i uwierzytelnianie oparte na certyfikatach. Aby uzyskać wyższy poziom zabezpieczeń, zalecamy użycie certyfikatu (zamiast klucza tajnego klienta) jako poświadczenia w poufnych aplikacjach klienckich.
W środowisku produkcyjnym należy zakupić certyfikat podpisany przez dobrze znany urząd certyfikacji, a następnie użyć usługi Azure Key Vault do zarządzania dostępem do certyfikatów i okresem istnienia. Jednak na potrzeby testowania można utworzyć certyfikat z podpisem własnym i skonfigurować aplikacje do uwierzytelniania za pomocą niego.
Z tego artykułu dowiesz się, jak wygenerować certyfikat z podpisem własnym przy użyciu usługi Azure Key Vault w witrynie Azure Portal, programie OpenSSL lub programie PowerShell. Jeśli masz już tajny klucz klienta, dowiesz się, jak bezpiecznie go usunąć.
W razie potrzeby można również programowo utworzyć certyfikat z podpisem własnym przy użyciu bibliotek klienckich .NET, Node.js, Go, Python lub Java .
Warunki wstępne
Visual Studio Code lub inny edytor kodu.
Zewnętrzny najemca. Jeśli jeszcze go nie masz, utwórz konto bezpłatnej wersji próbnej.
OpenSSL lub można łatwo zainstalować bibliotekę OpenSSL w systemie Windows za pośrednictwem aplikacji Chocolatey.
Program Windows PowerShell lub subskrypcja platformy Azure.
Tworzenie certyfikatu z podpisem własnym
Jeśli masz istniejący certyfikat z podpisem własnym na komputerze lokalnym, możesz pominąć ten krok, a następnie przejść do sekcji Przekazywanie certyfikatu do rejestracji aplikacji.
Aby wygenerować certyfikat z podpisem własnym dla aplikacji, możesz użyć usługi Azure Key Vault. Korzystając z usługi Azure Key Vault, możesz korzystać z korzyści, takich jak przypisywanie urzędu certyfikacji partnera i automatyzowanie rotacji certyfikatów.
Jeśli masz istniejący certyfikat z podpisem własnym w usłudze Azure Key Vault i chcesz go używać bez pobierania, pomiń ten krok, a następnie przejdź do sekcji Używanie certyfikatu z podpisem własnym bezpośrednio z usługi Azure Key Vault. W przeciwnym razie wykonaj następujące kroki, aby wygenerować certyfikat
Wykonaj kroki opisane w temacie Ustawianie i pobieranie certyfikatu z usługi Azure Key Vault przy użyciu witryny Azure Portal , aby utworzyć i pobrać certyfikat.
Po utworzeniu certyfikatu pobierz zarówno plik .cer , jak i plik pfx , taki jak ciam-client-app-cert.cer i ciam-client-app-cert.pfx. Plik .cer zawiera klucz publiczny i jest tym, co przekazujesz do centrum administracyjnego firmy Microsoft Entra.
W terminalu uruchom następujące polecenie, aby wyodrębnić klucz prywatny z pliku pfx. Po wyświetleniu monitu o wpisanie frazy hasła, wystarczy nacisnąć Enter, jeśli nie chcesz jej ustawiać. W przeciwnym razie wpisz wybraną frazę dostępu:
openssl pkcs12 -in ciam-client-app-cert.pfx -nocerts -out ciam-client-app-cert.key
Plik ciam-client-app-cert.key jest używany w aplikacji.
Prześlij certyfikat do rejestracji aplikacji
Aby użyć certyfikatu aplikacji klienckiej, musisz skojarzyć aplikację zarejestrowaną w centrum administracyjnym firmy Microsoft Entra z certyfikatem:
Zaloguj się do centrum administracyjnego firmy Microsoft Entra co najmniej jako administrator aplikacji.
Jeśli masz dostęp do wielu dzierżaw, użyj ikony Ustawienia
w górnym menu, aby przełączyć się do zewnętrznego dzierżawcy z menu Katalogi i subskrypcje.
Przejdź do obszaruRejestracje aplikacji>.
Z listy rejestracji aplikacji wybierz aplikację, którą chcesz skojarzyć z certyfikatem, taką jak ciam-client-app.
W obszarze Zarządzanie wybierz pozycję Certyfikaty i wpisy tajne.
Wybierz pozycję Certyfikaty, a następnie wybierz pozycję Przekaż certyfikat.
Wybierz ikonę Wybierz plik pliku , a następnie wybierz certyfikat, który chcesz przekazać, na przykład ciam-client-app-cert.pem lub ciam-client-app-cert.cer lub ciam-client-app-cert.crt.
W polu Opis wpisz opis, taki jak certyfikat aplikacji klienckiej CIAM, a następnie wybierz pozycję Dodaj , aby przekazać certyfikat. Po przekazaniu certyfikatu zostaną wyświetlone wartości Odcisk palca, Data rozpoczęcia i Wygaśnięcie .
Zarejestruj wartość odcisku palca do użycia później podczas konfigurowania aplikacji klienckiej.
Jeśli masz już tajne hasło klienta dla swojej aplikacji, musisz je usunąć, aby zapobiec złośliwemu używaniu go do podszywania się pod Twoją aplikację.
- Przejdź do karty Wpisy tajne klienta i wybierz ikonę Usuń .
- W wyświetlonym oknie podręcznym wybierz pozycję Tak.
Konfigurowanie aplikacji Node.js do używania certyfikatu
Po skojarzeniu rejestracji aplikacji z certyfikatem należy zaktualizować kod aplikacji, aby rozpocząć korzystanie z certyfikatu:
Znajdź plik zawierający obiekt konfiguracji biblioteki MSAL, taki jak
msalConfig
w authConfig.js, a następnie zaktualizuj go, aby wyglądał podobnie do poniższego kodu. Jeśli masz obecny klucz tajny klienta, upewnij się, że został on usunięty: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 };
W kodzie zastąp symbole zastępcze:
Add_Passphrase_Here
z frazą hasła, której użyłeś do zaszyfrowania klucza prywatnego.YOUR_CERT_THUMBPRINT
za pomocą zarejestrowanej wcześniej wartości odcisku palca .PATH_TO_YOUR_PRIVATE_KEY_FILE
ze ścieżką pliku do pliku klucza prywatnego.Enter_the_Application_Id_Here
z identyfikatorem aplikacji (klienta) zarejestrowanej wcześniej.Enter_the_Tenant_Subdomain_Here
i zastąp ją poddomeną Katalog (dzierżawa). Na przykład, jeśli podstawowa domena twojej dzierżawy tocontoso.onmicrosoft.com
, użyjcontoso
. Jeśli nie masz nazwy swojej dzierżawy, dowiedz się, jak odczytywać szczegóły dzierżawy.
Zaszyfrowaliśmy klucz (zalecamy, aby to zrobić), dlatego musimy go odszyfrować przed przekazaniem go do obiektu konfiguracji biblioteki MSAL.
//... const privateKeyObject = crypto.createPrivateKey({ key: privateKeySource, passphrase: 'Add_Passphrase_Here', format: 'pem' }); const privateKey = privateKeyObject.export({ format: 'pem', type: 'pkcs8' }); //...
Wykonaj kroki opisane w temacie Uruchamianie i testowanie aplikacji internetowej , aby przetestować aplikację.
Używanie certyfikatu z podpisem własnym bezpośrednio z usługi Azure Key Vault
Możesz użyć istniejącego certyfikatu bezpośrednio z usługi Azure Key Vault:
Znajdź plik zawierający obiekt konfiguracji biblioteki MSAL, taki jak
msalConfig
w authConfig.js, a następnie usuń właściwośćclientSecret
: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/`, }, //... };
Zainstaluj interfejs wiersza polecenia platformy Azure, a następnie w konsoli wpisz następujące polecenie, aby się zalogować:
az login --tenant YOUR_TENANT_ID
Zastąp symbol zastępczy
YOUR_TENANT_ID
identyfikatorem katalogu (dzierżawy), który skopiowałeś wcześniej.W konsoli wpisz następujące polecenie, aby zainstalować wymagane pakiety:
npm install --save @azure/identity @azure/keyvault-certificates @azure/keyvault-secrets
W aplikacji klienckiej użyj następującego kodu, aby wygenerować
thumbprint
iprivateKey
;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();
W kodzie zastąp symbole zastępcze:
ENTER_YOUR_KEY_VAULT_URL
z adresem URL usługi Azure Key Vault.ENTER_THE_NAME_OF_YOUR_CERTIFICATE_ON_KEY_VAULT
z nazwą certyfikatu w usłudze Azure Key Vault.
Użyj wartości
thumbprint
iprivateKey
, aby zaktualizować konfigurację:let clientCert = { thumbprint: thumbprint, privateKey: privateKey, }; msalConfig.auth.clientCertificate = clientCert; //For this to work, you can't declares your msalConfig using const modifier
Następnie utwórz instancję poufnego klienta, jak pokazano w metodzie
getMsalInstance
:class AuthProvider { //... getMsalInstance(msalConfig) { return new msal.ConfidentialClientApplication(msalConfig); } //... }
Wykonaj kroki opisane w temacie Uruchamianie i testowanie aplikacji internetowej , aby przetestować aplikację.
Powiązana zawartość
Dowiedz się, jak: