Инициализация конфиденциальных клиентских приложений в MSAL Node

В этой статье показано, как инициализировать ConfidentialClientApplication объект в MSAL Node. Вы узнаете, как безопасно использовать секреты и сертификаты, а также как настроить центр сертификации.

Необходимые условия

Прежде чем инициализировать приложение, сначала необходимо зарегистрировать его в Центр администрирования Microsoft Entra, установив связь доверия между приложением и платформа удостоверений Майкрософт.

После регистрации приложения вам потребуется некоторые или все следующие значения, которые можно найти в Центр администрирования Microsoft Entra.

Ценность Обязательный Description
Идентификатор приложения (клиента) Обязательный GUID, который однозначно идентифицирует ваше приложение на платформе идентификации Microsoft.
Авторитет Optional URL-адрес поставщика удостоверяющих данных ( instance) и аудитория для входа для вашего приложения. Экземпляр и аудитория входа в систему при объединении составляют центр авторизации.
ИД каталога (арендатора) Optional Укажите идентификатор каталога (клиента), если вы создаете бизнес-приложение исключительно для вашей организации, часто называемое однотенантным приложением.
Перенаправляющий URI Optional Если вы разрабатываете веб-приложение, элемент redirectUri указывает, куда поставщик удостоверений (платформа удостоверений Майкрософт) должен возвращать выданные им токены безопасности.

Инициализация ConfidentialClientApplication объекта

Чтобы использовать MSAL Node, необходимо создать экземпляр объекта ConfidentialClient .

Безопасное использование секретов и сертификатов

Секреты никогда не должны быть жестко закодированы. Пакет dotenv npm можно использовать для хранения секретов или сертификатов в env-файле (расположен в корневом каталоге проекта), который должен быть включен в gitignore , чтобы предотвратить случайные отправки секретов.

Сертификаты также можно считывать из файлов с помощью модуля fs NodeJS. Однако они никогда не должны храниться в каталоге проекта. Рабочие приложения должны получать сертификаты из Azure KeyVault или других защищенных хранилищ ключей.

Дополнительные сведения см. в сертификатах и секретах .

См. пример MSAL: auth-code-with-certs

import * as msal from "@azure/msal-node";
import "dotenv/config"; // process.env now has the values defined in a .env file

const clientAssertionCallback = async (config) => {
    // network request that uses config.clientId and (optionally) config.tokenEndpoint
    const result = await Promise.resolve(
        "network request which gets assertion"
    );
    return result;
};

const clientConfig = {
    auth: {
        clientId: "your_client_id",
        authority: "your_authority",
        clientSecret: process.env.clientSecret, // OR
        clientCertificate: {
            thumbprintSha256: process.env.thumbprint,
            privateKey: process.env.privateKey,
        }, // OR
        clientAssertion: clientAssertionCallback, // or a predetermined clientAssertion string
    },
};
const cca = new msal.ConfidentialClientApplication(clientConfig);

Обратитесь к разделу Распространённые проблемы при импорте сертификатов.

Основы конфигурации

Параметры конфигурации для узла имеют common параметры и specific пареметры для каждого потока проверки подлинности.

  • clientId является обязательным для инициализации общедоступного клиентского приложения
  • authority по умолчанию имеет значение https://login.microsoftonline.com/common/, если пользователь не задаёт его при настройке
  • Учетные данные клиента являются обязательными для конфиденциальных клиентов. Учетные данные клиента могут быть следующими:
    • clientSecret — это секретная строка, созданная при регистрации приложения.
    • clientCertificate — это сертификат, заданный для регистрации приложения. thumbprintSha256 — это отпечаток сертификата X.509 SHA-256, а privateKey — закрытый ключ в кодировке PEM. x5c — это необязательная цепочка сертификатов X.509, используемая в сценариях проверки подлинности субъекта или издателя.
    • clientAssertion — это объект ClientAssertion, содержащий строку утверждения или функцию обратного вызова, возвращающую строку утверждения, которую приложение использует при запросе токена, а также тип утверждения (urn:ietf:params:oauth:client-assertion-type:jwt-bearer). Функция обратного вызова вызывается каждый раз, когда MSAL необходимо получить токен от эмитента токена. Разработчики приложений обычно должны использовать обратный вызов, так как срок действия утверждений истекает, а новые утверждения необходимо создать. Разработчики приложений отвечают за время существования утверждения. Используйте этот механизм, чтобы получить токены для последующего API с помощью учетных данных федеративного удостоверения.

Дополнительные параметры Конфигурации см. в разделе Конфигурация в MSAL Node.

Настроить центр сертификации

По умолчанию MSAL настраивается с клиентом common , который используется для мультитенантных приложений и приложений, разрешающих персональные учетные записи (а не B2C).

    authority: 'https://login.microsoftonline.com/common/'

Если целевая аудитория приложения — один арендатор, необходимо указать authority с идентификатором вашего арендатора, как показано ниже:

    authority: 'https://login.microsoftonline.com/{your_tenant_id}'

Дальнейшие шаги