Node.js web uygulamanızda kimlik doğrulaması için istemci sertifikası kullanma
Şunlar için geçerlidir: İş gücü kiracılarıDış kiracılar (daha fazla bilgi edinin)
Microsoft Entra Dış Kimlik gizli istemci uygulamaları için iki tür kimlik doğrulamasını destekler: parola tabanlı kimlik doğrulaması (istemci gizli dizisi gibi) ve sertifika tabanlı kimlik doğrulaması. Daha yüksek bir güvenlik düzeyi için, gizli istemci uygulamalarınızda kimlik bilgisi olarak bir sertifika (istemci gizli dizisi yerine) kullanmanızı öneririz.
Üretimde, iyi bilinen bir sertifika yetkilisi tarafından imzalanan bir sertifika satın almalı, ardından sertifika erişimini ve ömrünü yönetmek için Azure Key Vault'u kullanmalısınız. Ancak, test amacıyla otomatik olarak imzalanan bir sertifika oluşturabilir ve uygulamalarınızı bu sertifikayla kimlik doğrulaması yapmak üzere yapılandırabilirsiniz.
Bu makalede Azure portal, OpenSSL veya PowerShell'de Azure Key Vault kullanarak otomatik olarak imzalanan bir sertifika oluşturmayı öğreneceksiniz. Zaten bir gizli diziniz varsa, bunu güvenli bir şekilde silmeyi öğreneceksiniz.
Gerektiğinde.NET, Node.js, Go, Python veya Java istemci kitaplıklarını kullanarak program aracılığıyla otomatik olarak imzalanan bir sertifika da oluşturabilirsiniz.
Önkoşullar
Visual Studio Code veya başka bir kod düzenleyicisi.
Dış kiracı. Henüz bir aboneliğiniz yoksa ücretsiz deneme sürümüne kaydolun.
OpenSSL veya Chocolatey aracılığıyla Windows'ta OpenSSL'yi kolayca yükleyebilirsiniz.
Windows PowerShell veya Azure aboneliği.
Otomatik olarak imzalanan sertifika oluşturma
Yerel bilgisayarınızda otomatik olarak imzalanan bir sertifika varsa bu adımı atlayabilir ve ardından Sertifikayı uygulama kaydınıza yükleme bölümüne geçebilirsiniz.
Azure Key Vault'u kullanarak uygulamanız için otomatik olarak imzalanan bir sertifika oluşturabilirsiniz. Azure Key Vault kullanarak, iş ortağı Sertifika Yetkilisi (CA) atama ve sertifika döndürmeyi otomatikleştirme gibi avantajlardan yararlanabilirsiniz.
Azure Key Vault'ta otomatik olarak imzalanan bir sertifikanız varsa ve bunu indirmeden kullanmak istiyorsanız bu adımı atlayın ve doğrudan Azure Key Vault'tan otomatik olarak imzalanan sertifika kullanma bölümüne geçin. Aksi takdirde, sertifikanızı oluşturmak için aşağıdaki adımları kullanın
Sertifikanızı oluşturmak ve indirmek için Azure portalını kullanarak Azure Key Vault'tan sertifika ayarlama ve alma bölümünde yer alan adımları izleyin.
Sertifikanızı oluşturduktan sonra hem .cer dosyasını hem de ciam-client-app-cert.cer ve ciam-client-app-cert.pfx gibi .pfx dosyasını indirin. .cer dosyası ortak anahtarı içerir ve Microsoft Entra yönetim merkezinize yüklediğiniz dosyadır.
Terminalinizde, .pfx dosyasından özel anahtarı ayıklamak için aşağıdaki komutu çalıştırın. Geçiş tümceciği yazmanız istendiğinde, ayarlamak istemiyorsanız enter tuşuna basmanız gerekir. Aksi takdirde, tercihinize göre bir geçiş tümceciği yazın:
openssl pkcs12 -in ciam-client-app-cert.pfx -nocerts -out ciam-client-app-cert.key
ciam-client-app-cert.key dosyası, uygulamanızda kullandığınız dosyadır.
Uygulama kaydınıza sertifika yükleme
İstemci uygulama sertifikanızı kullanmak için Microsoft Entra yönetim merkezine kaydettiğiniz uygulamayı sertifikayla ilişkilendirmeniz gerekir:
Microsoft Entra yönetim merkezinde en az Bir Uygulama Yöneticisi olarak oturum açın.
Birden çok kiracıya erişiminiz varsa, Dizinler + abonelikler menüsünden dış kiracınıza geçmek için üst menüdeki Ayarlar simgesinikullanın.
Kimlik>Uygulamaları'na> göz atın Uygulama kayıtları.
Uygulama kayıt listesinden, sertifikayla ilişkilendirmek istediğiniz uygulamayı (ciam-client-app gibi) seçin.
Yönet'in altında Sertifikalar ve gizli diziler'i seçin.
Sertifikalar'ı ve ardından Sertifikayı karşıya yükle'yi seçin.
Dosya dosyası seçin simgesini seçin ve ardından karşıya yüklemek istediğiniz sertifikayı seçin( örneğin, ciam-client-app-cert.pem veya ciam-client-app-cert.cer ya da ciam-client-app-cert.crt).
Açıklama için, CIAM istemci uygulaması sertifikası gibi bir açıklama yazın ve ardından Ekle'yi seçerek sertifikanızı karşıya yükleyin. Sertifika karşıya yüklendikten sonra Parmak İzi, Başlangıç tarihi ve Süre sonu değerleri görüntülenir.
Daha sonra istemci uygulamanızı yapılandırırken kullanmak üzere Parmak İzi değerini kaydedin.
Uygulamanız için zaten bir gizli diziniz varsa, uygulamanızın kimliğine bürünmeye yönelik kötü amaçlı bir uygulama kullanmaktan kaçınmak için gizli diziyi silmeniz gerekir:
- İstemci gizli dizileri sekmesine gidin ve Sil simgesini seçin.
- Açılan pencerede Evet'i seçin.
Node.js uygulamanızı sertifika kullanacak şekilde yapılandırma
Uygulama kaydınızı sertifikayla ilişkilendirdikten sonra, sertifikayı kullanmaya başlamak için uygulama kodunuzu güncelleştirmeniz gerekir:
authConfig.js gibi
msalConfig
MSAL yapılandırma nesnenizi içeren dosyayı bulun ve aşağıdaki koda benzer şekilde güncelleştirin. Bir gizli diziniz varsa, bunu kaldırdığınızdan emin olun: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 };
Kodunuzda yer tutucuları değiştirin:
Add_Passphrase_Here
özel anahtarınızı şifrelemek için kullandığınız geçiş tümceciğiyle birlikte.YOUR_CERT_THUMBPRINT
daha önce kaydettiğiniz Parmak İzi değeriyle birlikte.PATH_TO_YOUR_PRIVATE_KEY_FILE
özel anahtar dosyanızın dosya yoluyla birlikte.Enter_the_Application_Id_Here
daha önce kaydettiğiniz uygulamanın Uygulama (istemci) kimliğiyle.Enter_the_Tenant_Subdomain_Here
ve bunu Dizin (kiracı) alt etki alanıyla değiştirin. Örneğin, kiracı birincil etki alanınız isecontoso.onmicrosoft.com
kullanıncontoso
. Kiracı adınız yoksa kiracınızın ayrıntılarını nasıl okuyacağınızı öğrenin.
Anahtarı şifreledik (bunu yapmanızı öneririz), bu nedenle MSAL yapılandırma nesnesine geçirmeden önce şifresini çözmemiz gerekir.
//... const privateKeyObject = crypto.createPrivateKey({ key: privateKeySource, passphrase: 'Add_Passphrase_Here', format: 'pem' }); const privateKey = privateKeyObject.export({ format: 'pem', type: 'pkcs8' }); //...
Uygulamanızı test etmek için Web uygulamasını çalıştırma ve test etme'deki adımları kullanın.
Otomatik olarak imzalanan sertifikayı doğrudan Azure Key Vault'tan kullanma
Mevcut sertifikanızı doğrudan Azure Key Vault'tan kullanabilirsiniz:
authConfig.js gibi
msalConfig
MSAL yapılandırma nesnenizi içeren dosyayı bulun ve ardından özelliğini kaldırın: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/`, }, //... };
Azure CLI'yı yükleyin, ardından konsolunuza oturum açmak için aşağıdaki komutu yazın:
az login --tenant YOUR_TENANT_ID
Yer tutucuyu
YOUR_TENANT_ID
daha önce kopyaladığınız Dizin (kiracı) kimliğiyle değiştirin.Konsolunuzda, gerekli paketleri yüklemek için aşağıdaki komutu yazın:
npm install --save @azure/identity @azure/keyvault-certificates @azure/keyvault-secrets
İstemci uygulamanızda ve
privateKey
oluşturmakthumbprint
için aşağıdaki kodu kullanın;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();
Kodunuzda yer tutucuları değiştirin:
ENTER_YOUR_KEY_VAULT_URL
Azure Key Vault URL'nizle birlikte.ENTER_THE_NAME_OF_YOUR_CERTIFICATE_ON_KEY_VAULT
Azure Key Vault'ta sertifikanızın adıyla birlikte.
thumbprint
Yapılandırmanızı güncelleştirmek için veprivateKey
değerlerini kullanın:let clientCert = { thumbprint: thumbprint, privateKey: privateKey, }; msalConfig.auth.clientCertificate = clientCert; //For this to work, you can't declares your msalConfig using const modifier
Ardından yönteminde gösterildiği gibi gizli istemcinizin örneğini oluşturma işlemine
getMsalInstance
geçin:class AuthProvider { //... getMsalInstance(msalConfig) { return new msal.ConfidentialClientApplication(msalConfig); } //... }
Uygulamanızı test etmek için Web uygulamasını çalıştırma ve test etme'deki adımları kullanın.
Sonraki adımlar
Şunları nasıl yapacağınızı öğrenin: