Bagikan melalui


Menggunakan sertifikat klien untuk autentikasi di aplikasi web Node.js Anda

Berlaku untuk: Lingkaran putih dengan simbol X abu-abu. Penyewa Tenaga Kerja Lingkaran hijau dengan simbol tanda centang putih. Penyewa eksternal (pelajari selengkapnya)

MICROSOFT Entra External ID mendukung dua jenis autentikasi untuk aplikasi klien rahasia; autentikasi berbasis kata sandi (seperti rahasia klien) dan autentikasi berbasis sertifikat. Untuk tingkat keamanan yang lebih tinggi, sebaiknya gunakan sertifikat (bukan rahasia klien) sebagai kredensial di aplikasi klien rahasia Anda.

Dalam produksi, Anda harus membeli sertifikat yang ditandatangani oleh otoritas sertifikat terkenal, lalu menggunakan Azure Key Vault untuk mengelola akses sertifikat dan masa pakai. Namun, untuk tujuan pengujian, Anda dapat membuat sertifikat yang ditandatangani sendiri dan mengonfigurasi aplikasi Untuk mengautentikasinya.

Dalam artikel ini, Anda belajar membuat sertifikat yang ditandatangani sendiri dengan menggunakan Azure Key Vault di portal Microsoft Azure, OpenSSL, atau PowerShell. Jika Anda sudah memiliki rahasia klien, Anda akan mempelajari cara menghapusnya dengan aman.

Jika diperlukan, Anda juga dapat membuat sertifikat yang ditandatangani sendiri secara terprogram dengan menggunakan pustaka klien .NET, Node.js, Go, Python , atau Java .

Prasyarat

Membuat sertifikat yang ditandatangani sendiri

Jika Anda memiliki sertifikat yang ditandatangani sendiri di komputer lokal, Anda dapat melewati langkah ini, lalu melanjutkan ke Mengunggah sertifikat ke pendaftaran aplikasi Anda.

Anda dapat menggunakan Azure Key Vault untuk membuat sertifikat yang ditandatangani sendiri untuk aplikasi Anda. Dengan menggunakan Azure Key Vault, Anda menikmati manfaat, seperti, menetapkan Otoritas Sertifikat (CA) mitra dan mengotomatiskan rotasi sertifikat.

Jika Anda memiliki sertifikat yang ditandatangani sendiri di Azure Key Vault, dan Anda ingin menggunakannya tanpa mengunduhnya, lewati langkah ini, lalu lanjutkan menggunakan sertifikat yang ditandatangani sendiri langsung dari Azure Key Vault. Jika tidak, gunakan langkah-langkah berikut untuk membuat sertifikat Anda

  1. Ikuti langkah-langkah dalam Mengatur dan mengambil sertifikat dari Azure Key Vault menggunakan portal Microsoft Azure untuk membuat dan mengunduh sertifikat Anda.

  2. Setelah Membuat sertifikat, unduh file .cer dan file .pfx seperti ciam-client-app-cert.cer dan ciam-client-app-cert.pfx. File .cer berisi kunci publik dan merupakan apa yang Anda unggah ke pusat admin Microsoft Entra Anda.

  3. Di terminal Anda, jalankan perintah berikut untuk mengekstrak kunci privat dari file .pfx . Saat diminta untuk mengetikkan frasa pass, cukup tekan tombol Enter jika Anda tidak ingin mengaturnya. Jika tidak, ketik frasa sandi pilihan Anda:

    openssl pkcs12 -in ciam-client-app-cert.pfx -nocerts -out ciam-client-app-cert.key
    

    File ciam-client-app-cert.key adalah yang digunakan dalam aplikasi Anda.

Mengunggah sertifikat ke pendaftaran aplikasi Anda

Untuk menggunakan sertifikat aplikasi klien, Anda perlu mengaitkan aplikasi yang Anda daftarkan di pusat admin Microsoft Entra dengan sertifikat:

  1. Masuk ke pusat admin Microsoft Entra sebagai setidaknya Administrator Aplikasi.

  2. Jika Anda memiliki akses ke beberapa tenant, gunakan ikon Pengaturan di menu atas untuk beralih ke tenant eksternal Anda dari menu Direktori + langganan .

  3. Buka Entra ID>pendaftaran Aplikasi.

  4. Dari daftar pendaftaran aplikasi, pilih aplikasi yang ingin Anda kaitkan dengan sertifikat, seperti ciam-client-app.

  5. Di bawah Kelola, pilih Sertifikat & rahasia.

  6. Pilih Sertifikat, lalu pilih Unggah sertifikat.

  7. Pilih ikon Pilih file file , lalu pilih sertifikat yang ingin Anda unggah, seperti ciam-client-app-cert.pem atau ciam-client-app-cert.cer atau ciam-client-app-cert.crt.

  8. Untuk Deskripsi, ketik deskripsi, seperti, sertifikat aplikasi klien CIAM, lalu pilih Tambahkan untuk mengunggah sertifikat Anda. Setelah sertifikat diunggah, nilai Thumbprint, Tanggal mulai, dan Kedaluwarsa ditampilkan.

  9. Rekam nilai Thumbprint untuk digunakan nanti saat Anda mengonfigurasi aplikasi klien Anda.

Jika Anda sudah memiliki rahasia klien untuk aplikasi Anda, Anda perlu menghapusnya untuk menghindari aplikasi berbahaya untuk meniru aplikasi Anda:

  1. Buka tab Rahasia klien , dan pilih ikon Hapus .
  2. Di jendela pop-up yang muncul, pilih Ya.

Mengonfigurasi aplikasi Node.js Anda untuk menggunakan sertifikat

Setelah mengaitkan pendaftaran aplikasi dengan sertifikat, Anda perlu memperbarui kode aplikasi untuk mulai menggunakan sertifikat:

  1. Temukan file yang berisi objek konfigurasi MSAL Anda, seperti msalConfig di authConfig.js, lalu perbarui agar terlihat mirip dengan kode berikut. Jika Anda memiliki rahasia klien yang ada, pastikan Anda menghapusnya:

    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
    };
    

    Dalam kode Anda, ganti penanda:

    • Add_Passphrase_Here dengan frasa sandi yang Anda gunakan untuk mengenkripsi kunci privat Anda.

    • YOUR_CERT_THUMBPRINT dengan nilai Thumbprint yang Anda catat sebelumnya.

    • PATH_TO_YOUR_PRIVATE_KEY_FILE dengan jalur file ke file kunci privat Anda.

    • Enter_the_Application_Id_Here dengan ID aplikasi (klien) yang Anda daftarkan sebelumnya.

    • Enter_the_Tenant_Subdomain_Here dan menggantinya dengan subdomain Direktori (tenant). Misalnya, jika domain utama penyewa Anda adalah contoso.onmicrosoft.com, gunakan contoso. Jika Anda tidak memiliki nama penyewa, pelajari cara membaca detail penyewa Anda.

    Kami mengenkripsi kunci (kami sarankan Anda melakukannya), jadi kami harus mendekripsinya sebelum kami meneruskannya ke objek konfigurasi MSAL.

    //...
    const privateKeyObject = crypto.createPrivateKey({
        key: privateKeySource,
        passphrase: 'Add_Passphrase_Here',
        format: 'pem'
    });
    
    const privateKey = privateKeyObject.export({
        format: 'pem',
        type: 'pkcs8'
    });
    //...
    
  2. Gunakan langkah-langkah dalam Menjalankan dan menguji aplikasi web untuk menguji aplikasi Anda.

Menggunakan sertifikat yang ditandatangani sendiri langsung dari Azure Key Vault

Anda dapat menggunakan sertifikat yang ada langsung dari Azure Key Vault:

  1. Temukan file yang berisi objek konfigurasi MSAL Anda, seperti msalConfig di authConfig.js, lalu hapus clientSecret properti :

    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. Instal Azure CLI, lalu di konsol Anda, ketik perintah berikut untuk masuk:

    az login --tenant YOUR_TENANT_ID
    

    Ganti tempat penampung YOUR_TENANT_ID dengan ID Direktori (penyewa) yang Anda salin sebelumnya.

  3. Di konsol Anda, ketik perintah berikut untuk menginstal paket yang diperlukan:

    npm install --save @azure/identity @azure/keyvault-certificates @azure/keyvault-secrets
    
  4. Di aplikasi klien Anda, gunakan kode berikut untuk menghasilkan thumbprint dan privateKey;

    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();        
    

    Dalam kode Anda, ganti penanda:

    • ENTER_YOUR_KEY_VAULT_URL dengan URL Azure Key Vault Anda.

    • ENTER_THE_NAME_OF_YOUR_CERTIFICATE_ON_KEY_VAULT dengan nama sertifikat Anda di Azure Key Vault.

  5. thumbprint Gunakan nilai dan privateKey untuk memperbarui konfigurasi Anda:

    let clientCert = {
        thumbprint: thumbprint, 
        privateKey: privateKey,
    };
    
    msalConfig.auth.clientCertificate = clientCert; //For this to work, you can't declares your msalConfig using const modifier 
    
  6. Kemudian lanjutkan untuk membuat instans klien rahasia Anda seperti yang getMsalInstance ditunjukkan dalam metode :

    class AuthProvider {
        //...
        getMsalInstance(msalConfig) {
            return new msal.ConfidentialClientApplication(msalConfig);
        }
        //...
    }
    
  7. Gunakan langkah-langkah dalam Menjalankan dan menguji aplikasi web untuk menguji aplikasi Anda.

Pelajari cara: