Aracılığıyla paylaş


Node.js web uygulamanızda kimlik doğrulaması için istemci sertifikası kullanma

Şunlar için geçerlidir: Gri X simgesine sahip beyaz daire. İş gücü kiracılarıBeyaz onay işareti simgesi olan yeşil daire.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

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

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

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

  3. 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:

  1. Microsoft Entra yönetim merkezinde en az Bir Uygulama Yöneticisi olarak oturum açın.

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

  3. Kimlik>Uygulamaları'na> göz atın Uygulama kayıtları.

  4. Uygulama kayıt listesinden, sertifikayla ilişkilendirmek istediğiniz uygulamayı (ciam-client-app gibi) seçin.

  5. Yönet'in altında Sertifikalar ve gizli diziler'i seçin.

  6. Sertifikalar'ı ve ardından Sertifikayı karşıya yükle'yi seçin.

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

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

  9. 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:

  1. İstemci gizli dizileri sekmesine gidin ve Sil simgesini seçin.
  2. 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:

  1. authConfig.js gibi msalConfigMSAL 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_THUMBPRINTdaha ö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 ise contoso.onmicrosoft.comkullanın contoso. 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'
    });
    //...
    
  2. 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:

  1. authConfig.js gibi msalConfigMSAL 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/`, 
        },
        //...
    };
    
  2. 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.

  3. Konsolunuzda, gerekli paketleri yüklemek için aşağıdaki komutu yazın:

    npm install --save @azure/identity @azure/keyvault-certificates @azure/keyvault-secrets
    
  4. İstemci uygulamanızda ve privateKeyoluşturmak thumbprint 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.

  5. thumbprint Yapılandırmanızı güncelleştirmek için ve privateKey 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 
    
  6. 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);
        }
        //...
    }
    
  7. 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: