node.js - 将证书凭据与 msal-node 结合使用

标签 node.js azure msal.js

我有一个本地 Nodejs SPA,我想使用 MSAL 来保护它的安全。 Node sample project使用带有此配置的 msal-node 并且可以正确进行身份验证。

const config = {
    auth: {
        clientId: "025BlahBlahBlahb3ac",
        authority: "https://login.microsoftonline.com/04ccTenantIDdbdaf",
        clientSecret: "-6csBlahBlahBlahsqO"
    }

但是,教程指出“在 secret 客户端应用程序中使用 certificate credentials 而不是客户端 secret ”

我认为这意味着配置应该如下所示

const config = {
    auth: {
        clientId: "025BlahBlahBlahb3ac",
        authority: "https://login.microsoftonline.com/04ccTenantIDdbdaf",
        clientCertificate: {
            thumbprint: string;
            privateKey: string;
        }
    };

我已在 Azure KeyVault 中创建了一个证书(尚未包含任何 secret )并导出了 pem,这为我提供了私钥和证书。我是使用 jwt 插件还是只填写指纹和私钥?

pem 中私钥的开头如下所示

-----BEGIN PRIVATE KEY-----
BIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCfGkz5bHZe1g5K
zQXDNHd7RecP+/TgN/4rQdyBeSnNhijyT1cG93cglo9Bg9eAeFMvO8AONNyucdpV

这是一个 fs.readFileSync 还是需要对 key 进行一些编码?

最佳答案

令人惊奇的是,经过一夜的休息后,一切变得如此轻松。

  1. 在 Azure KeyVault 中创建 PEM 证书
  2. 导出 CER 和 PEM 格式。
  3. 将 CER 导入应用注册(我删除了我的客户端 key )
  4. 将 PEM 放入应用目录中。
const express = require("express");
const msal = require('@azure/msal-node');
const fs = require('fs');

const PRIV_KEY = fs.readFileSync(__dirname + '/lf-kv-ae-int-LF-CERT-INT-KV-20210610.pem', 'utf8');

const SERVER_PORT = process.env.PORT || 3000;
const REDIRECT_URI = "http://localhost:3000/redirect";

const config = {
    auth: {
        clientId: "025dfgq28-AppRegistrationClientID-8d50ert5b3ac",
        authority: "https://login.microsoftonline.com/04ccwra3-YourTenantID-5ewe6u8uaf",
        clientCertificate: {
            thumbprint: "7CA7CopyTheThumbprintFromTheCertificateE8E",
            privateKey: PRIV_KEY
        }
    },
    system: {
        loggerOptions: {
            loggerCallback(loglevel, message, containsPii) {
                console.log(message);
            },
            piiLoggingEnabled: false,
            logLevel: msal.LogLevel.Verbose,
        }
    }
};

// Create msal application object
const pca = new msal.ConfidentialClientApplication(config);
// The rest of the code is in the example...

关于node.js - 将证书凭据与 msal-node 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67915649/

相关文章:

node.js - 仅当从 node.js 运行时,Shell 脚本应在读取输入时挂起

javascript - 有没有一种方法可以缩短字符串唯一 ID 数组,同时仍确保唯一性?

Azure Cosmos DB : 503 Service Unavailable

azure - allowRedirectInIframe 设置为 true MSAL 不起作用

node.js - Websocket - 等待 http 请求回调在下一个推送事件之前执行

node.js - Dockerfile 中的环境变量

azure - 突触管道中的 DF-Executor-OutOfMemoryError

sql-server - 使用 Azure 应用服务从 Excel 文件读取数据的推荐方法?

azure - 为什么 azure-active-directory-spring-boot-starter 需要访问 Microsoft?

azure - 如何使用 MSAL 正确请求 Azure 资源管理终结点范围?