【问题标题】:Use clientCredentials with msal-node将 clientCredentials 与 msal-node 一起使用
【发布时间】:2021-06-11 07:09:41
【问题描述】:

我有一个本地 nodejs SPA,我想用 MSAL 保护它。 Node sample project 使用带有此配置的 msal-node 并正确验证。

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

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

我认为,这意味着配置应该看起来像

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

我在 Azure KeyVault 中创建了一个证书(还没有机密)并导出了 pem,它为我提供了一个私钥和证书。我是在使用 jwt 插件还是只是填写指纹和 privateKey?

pem中私钥的开头是这样的

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

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

【问题讨论】:

    标签: node.js azure msal.js


    【解决方案1】:

    令人惊讶的是,经过一夜的休息后,它会变得多么容易。

    1. 在 Azure KeyVault 中创建 PEM 证书
    2. 同时导出 CER 和 PEM 格式。
    3. 将 CER 导入应用注册(我删除了我的客户端密码)
    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...
    

    【讨论】:

      【解决方案2】:

      您共享的 PEM 文件的内容是您的证书私钥,如果您想使用它通过节点 js 从 Azure AD 获取访问令牌,只需尝试 my previous post here 中的 Step 3:只需指定代码中的 .pem 文件路径。

      如果您还有其他问题,请告诉我。

      【讨论】:

        猜你喜欢
        • 2021-09-02
        • 1970-01-01
        • 2017-12-02
        • 2018-11-02
        • 1970-01-01
        • 2020-05-04
        • 2014-02-13
        • 2011-06-02
        • 2013-04-24
        相关资源
        最近更新 更多