Упражнение: реализация мультитенантных данных

Завершено

В этом упражнении описываются следующие процессы.

  • Установка Базы данных Azure для PostgreSQL в модели развертывания сервера.
  • Создание базы данных с образцами данных инвентаризации.
  • Интеграция сервера с идентификатором Microsoft Entra.
  • Реализация простого приложения на основе Node.js, которое запрашивает базу данных, опираясь на проверку подлинности Microsoft Entra.

Примечание.

В этом упражнении демонстрируется упрощенный подход к обеспечению поддержки нескольких клиентов путем эмуляции функции мультитенантности Базы данных Azure для модели развертывания Гипермасштабирования PostgreSQL. Он также предоставляет упрощенный подход к реализации проверки подлинности Microsoft Entra в мультитенантных сценариях, опираясь на функциональные возможности Microsoft Entra B2B. Идентификатор Microsoft Entra id напрямую поддерживает мультитенантные приложения, но их подробное покрытие выходит за рамки этого модуля.

В этом упражнении вы выполните следующие действия.

  • Создадите экземпляр Базы данных Azure для PostgreSQL.
  • Подключитесь к серверу Базы данных Azure для PostgreSQL.
  • Создадите базу данных и образцы таблиц.
  • Интеграция сервера База данных Azure для PostgreSQL с идентификатором Microsoft Entra.
  • Регистрация приложения с Microsoft Entra ID.
  • Реализуйте простое интегрированное приложение на основе Node.js Microsoft Entra.
  • Проверите функциональность Node.js-приложения.

Необходимые компоненты

Для выполнения этого упражнения вам потребуется:

  • Чтобы завершить упражнение , настройте идентификатор Microsoft Entra в подписке Azure.
  • Учетная запись Майкрософт или учетная запись Microsoft Entra с ролью глобального администратора в клиенте Microsoft Entra, связанном с подпиской Azure, и ролью владельца или участника в подписке Azure.

Предупреждение

Используйте тестовую среду, так как упражнения в этом модуле выполняют конфиденциальные операции, требующие повышенных прав администратора.

Создание экземпляра Базы данных Azure для PostgreSQL

Вы начнете с создания экземпляра Базы данных Azure для PostgreSQL.

  1. При необходимости запустите веб-браузер, перейдите на портал Azure и выполните вход, чтобы получить доступ к подписке Azure, которую вы будете использовать в этом модуле.

  2. Используйте текстовое поле "Поиск ресурсов, служб и документов" в начале страницы портал Azure для поиска База данных Azure для PostgreSQL и в списке результатов в разделе "Службы" выберите База данных Azure для PostgreSQL.

  3. В колонке База данных Azure для PostgreSQL серверов нажмите кнопку +Создать.

  4. В колонке "Выбор База данных Azure для PostgreSQL развертывания" на плитке База данных Azure для PostgreSQL для типа ресурса выберите один сервер.

  5. Нажмите кнопку создания.

  6. На вкладке "Основные сведения" колонки "Один сервер" настройте следующие параметры, а затем выберите "Проверить и создать", оставив все остальные параметры со значениями по умолчанию:

    Параметр Настройка
    Отток подписок Выберите имя подписки Azure, которую вы используете в этом модуле.
    Группа ресурсов Создайте новую группу ресурсов с именем postgresql-db-RG.
    Имя сервера Введите уникальное имя, состоящее из строчных букв, цифр и (или) дефисов и начинающееся с буквы.
    Источник данных Выберите Отсутствует.
    Расположение Выберите ближайший регион Azure для среды упражнения, где можно создать экземпляры Базы данных Azure для PostgreSQL.
    Версия Выберите 11.
    Вычисления и хранение Щелкните ссылку Настроить сервер. В области Настройка выберите Основные, установите для параметра Виртуальные ядра значение 1, а для параметра Хранилище — 5 ГБ, и затем нажмите кнопку OK.
    Имя администратора Введите student.
    Пароль <password>Введите .

    Снимок экрана вкладки

  7. На вкладке Просмотр и создание в области Одиночный сервер нажмите Создать.

  8. Дождитесь завершения подготовки. Это может занять около пяти минут.

    Примечание.

    Процесс подготовки автоматически создаст базу данных с именем postgres на целевом сервере.

Подключение к серверу Базы данных Azure для PostgreSQL

После подготовки сервера Базы данных Azure для PostgreSQL к нему можно подключиться с помощью средства psql.

  1. В колонке Microsoft.PostgreSQLServer.createPostgreSqlServer Overview выберите "Перейти к ресурсу".

  2. В колонке "Развертывание " в вертикальном меню в разделе "Параметры " выберите "Безопасность подключения".

  3. В области Безопасность подключения установите для параметра Разрешить доступ к службам Azure значение Да, нажмите + Добавить IP-адрес клиента, установите переключатель Принудительно использовать SSL-соединение в положение ОТКЛЮЧЕНО и нажмите кнопку Сохранить.

    Примечание.

    Эти параметры позволяют подключиться к базе данных с компьютера и из приложений, работающих в Azure.

    Примечание.

    Отключение принудительного применения SSL-соединения необходимо для упрощения выполнения последующих упражнений. Обычно этот параметр должен быть включен.

  4. В окне браузера, отображающем портал Azure с колонкой "Развертывание", в вертикальном меню выберите "Обзор".

  5. В разделе Основные сведения найдите записи рядом с метками Имя сервера и Имя пользователя администратора и запишите их значения.

    Примечание.

    Обратите внимание, что имя пользователя содержит символ @, за которым следует имя сервера, указанное в предыдущей задаче.

  6. В окне браузера, отображающем портал Azure с колонкой База данных Azure для PostgreSQL отдельный сервер, в вертикальном меню в разделе "Параметры" выберите строки подключения.

  7. В списке строка подключения скопируйте значение psql строка подключения и запишите его, чтобы использовать его позже в этом упражнении.

    Примечание.

    Строка подключения имеет следующий синтаксис, где заполнитель <server_name> представляет имя сервера, который вы определили ранее в этой задаче.

    psql "host=<server_name>.postgres.database.azure.com port=5432 dbname={your_database} user=student@<server_name> password={your_password} sslmode=require"
    
  8. На портале Azure откройте сеанс Bash в Cloud Shell, щелкнув соответствующий значок панели инструментов рядом с текстовым полем поиска.

  9. В сеансе Bash в области Cloud Shell вставьте значение строки подключения psql из буфера обмена, измените его таким образом, чтобы оно соответствовало следующей команде, и запустите ее для подключения к базе данных postgres, размещенной на вновь развернутом экземпляре сервера Базы данных Azure для PostgreSQL. Значение заполнителя <server_name> уже будет содержаться в строке подключения, вставленной из буфера обмена.

    psql "host=<server_name>.postgres.database.azure.com port=5432 dbname=postgres user=student@<server_name>.postgres.database.azure.com password=<enter your password> sslmode=require"
    

    Примечание.

    После успешного подключения отобразится приглашение postgres=>.

Создание базы данных и образцов таблиц

  1. В области Cloud Shell в командной строке postgres=> выполните следующую команду, чтобы создать новую базу данных с именем cnamtinventory:

    CREATE DATABASE cnamtinventory;
    
  2. Выполните следующую команду, чтобы переключить соединение на вновь созданную базу данных.

    \c cnamtinventory
    
  3. Выполните приведенную ниже команду, чтобы создать таблицу tenants.

    CREATE TABLE tenants (
      id bigserial PRIMARY KEY,
      name text NOT NULL,
      created_at TIMESTAMP DEFAULT NOW()::date,
      updated_at TIMESTAMP DEFAULT NOW()::date
    );
    
  4. Выполните приведенную ниже команду, чтобы создать таблицу inventory.

    CREATE TABLE inventory (
    id bigserial,
    tenant_id bigint REFERENCES tenants (id),
    name VARCHAR(50),
    quantity INTEGER,
        date DATE NOT NULL DEFAULT NOW()::date,
        created_at TIMESTAMP DEFAULT NOW()::date,
        updated_at TIMESTAMP DEFAULT NOW()::date,
        PRIMARY KEY (tenant_id, id, date)
    ) PARTITION BY RANGE (date);
    
    CREATE TABLE inventory_default PARTITION OF inventory DEFAULT;
    

    Примечание.

    Данные секционируются на основе значения столбца date.

  5. Выполните следующую команду, чтобы убедиться, что таблица успешно создана:

    \dt
    
  6. Выполните следующую команду, чтобы загрузить образцы данных в таблицу tenants.

    INSERT INTO tenants (id, name) VALUES (1, 'adatum');
    INSERT INTO tenants (id, name) VALUES (2, 'contoso');
    
  7. Выполните следующую команду, чтобы загрузить образцы данных в таблицу inventory.

    INSERT INTO inventory (id, tenant_id, name, quantity) VALUES (1, 1, 'yogurt', 200);
    INSERT INTO inventory (id, tenant_id, name, quantity) VALUES (2, 1, 'milk', 100);
    INSERT INTO inventory (id, tenant_id, name, quantity) VALUES (1, 2, 'yogurt', 20);
    INSERT INTO inventory (id, tenant_id, name, quantity) VALUES (2, 2, 'milk', 10);
    
  8. Выполните следующую команду, чтобы убедиться, что таблица inventory содержит вставленные данные.

    SELECT * FROM inventory;
    
  9. Закройте область Cloud Shell.

Интеграция сервера База данных Azure для PostgreSQL с идентификатором Microsoft Entra

Чтобы интегрировать экземпляр сервера База данных Azure для PostgreSQL с идентификатором Microsoft Entra ID, необходимо предоставить учетную запись пользователя Microsoft Entra в качестве назначенного администратора Active Directory сервера. Для этой цели вы будете использовать учетную запись пользователя adatumadmin1, созданную в предыдущей задаче. Необходимо войти на сервер с использованием этой учетной записи пользователя. На этом этапе вы сможете создать пользователей базы данных на основе идентификаторов Microsoft Entra и назначить им роли базы данных. Вы будете использовать для объектов adatumuser1, adatumgroup1 и contosouser1 Microsoft Entra, созданных в предыдущем упражнении.

  1. В окне браузера, в котором отображается портал Azure с областью "База данных Azure для сервера PostgreSQL", в вертикальном меню в разделе Параметры выберите Администратор Active Directory, а затем на панели инструментов выберите команду Задать администратора.

  2. В колонке администратора Active Directory в списке учетных записей пользователей Microsoft Entra выберите учетную запись пользователя adatumadmin1, созданную в предыдущем упражнении, нажмите кнопку "Выбрать" и нажмите кнопку "Сохранить".

  3. Откройте другое окно веб-браузера в режиме Incognito/InPrivate, перейдите к портал Azure и войдите с помощью учетной записи пользователя adatumadmin1 с паролем, созданным в предыдущем упражнении.

  4. На портале Azure перейдите в область Cloud Shell, щелкнув соответствующий значок панели инструментов рядом с текстовым полем поиска.

  5. Когда появится запрос выбора Bash или PowerShell, выберите Bash, а затем при отображении сообщения У вас не подключено хранилище выберите Создать хранилище.

  6. В сеансе Bash на панели Cloud Shell выполните следующие команды, чтобы получить и отобразить маркер доступа Microsoft Entra, необходимый для доступа к База данных Azure для PostgreSQL:

    FULL_TOKEN=$(az account get-access-token --resource-type oss-rdbms)
    echo $FULL_TOKEN
    

    Примечание.

    Эта команда выводит данные с маркером в кодировке Base 64, который определяет пользователя, прошедшего проверку подлинности, в ресурсе Базы данных Azure PostgreSQL.

    Выходные данные имеют следующий формат.

    {
      "accessToken": "<placeholder for token value>",
      "expiresOn": "2021-05-21 18:22:44.000000",
      "subscription": "cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
      "tenant": "eeeeffff-4444-aaaa-5555-bbbb6666cccc",
      "tokenType": "Bearer"
    }
    
  7. Выполните следующую команду, чтобы присвоить переменной PGPASSWORD значение маркера доступа из выходных данных команды, выполненной на предыдущем шаге.

    export PGPASSWORD=$(echo $FULL_TOKEN | jq -r '.accessToken')
    
  8. Выполните следующую команду, чтобы подключиться к базе данных cnamtinventory с помощью средства psql и с помощью проверки подлинности Microsoft Entra (замените <server_name> заполнитель именем сервера, который вы определили ранее в этом упражнении):

    DOMAIN_NAME=$(az rest --method GET --url 'https://management.azure.com/tenants?api-version=2020-01-01' --query "value[0].defaultDomain" -o tsv)
    psql "host=<server_name>.postgres.database.azure.com user=adatumadmin1@$DOMAIN_NAME@<server_name> dbname=cnamtinventory sslmode=require"
    

    Примечание.

    После успешного подключения отобразится приглашение cnamtinventory=>.

  9. В командной строке cnamtinventory=> выполните следующую команду, чтобы создать роль базы данных, соответствующую группе Microsoft Entra adatumgroup1 , созданной в предыдущем упражнении:

    CREATE ROLE "adatumgroup1" WITH LOGIN IN ROLE azure_ad_user;
    
  10. Выполните следующую команду, чтобы убедиться, что роли были успешно созданы.

    SELECT rolname FROM pg_roles;
    
  11. Выполните следующую команду, чтобы предоставить разрешения SELECT на таблицу inventory пользователю adatumgroup1, созданному в предыдущем упражнении.

    GRANT SELECT ON inventory TO adatumgroup1;
    
  12. Выйдите из учетной записи пользователя adatumadmin1 и закройте окно веб-браузера, находящееся в режиме инкогнито или InPrivate.

Регистрация приложения с помощью идентификатора Microsoft Entra

Чтобы реализовать пример приложения на основе Node.js, использующего проверку подлинности Microsoft Entra для доступа к базе данных База данных Azure для PostgreSQL, необходимо создать объект приложения Microsoft Entra и соответствующий субъект безопасности. Это позволит приложению на основе Node.js олицетворить пользователей Microsoft Entra при доступе к объектам базы данных.

  1. В портал Azure используйте текстовое поле "Поиск ресурсов, служб и документов" для поиска идентификатора Microsoft Entra ID, а в списке результатов выберите идентификатор Microsoft Entra.

  2. В колонке Microsoft Entra в вертикальном меню в разделе "Управление" выберите Регистрация приложений.

  3. В области Регистрация приложений выберите + Новая регистрация.

  4. В области Регистрация приложения в текстовом поле Имя введите cna-app. В разделе "Поддерживаемые типы учетных записей" убедитесь, что выбран параметр "Учетные записи" только в этом каталоге организации (только каталог по умолчанию — один клиент). В разделе URI перенаправления (необязательно) выберите вариант Веб и значение http://localhost:8080/redirect, а затем нажмите кнопку Зарегистрировать.

    Снимок экрана: область

    Примечание.

    Вы можете настроить мультитенантную поддержку зарегистрированных приложений Microsoft Entra. Однако подробное рассмотрение этого вопроса выходит за рамки этого модуля.

    Примечание.

    После развертывания приложения необходимо изменить значение URI перенаправления (необязательно), чтобы оно отражало фактический URL-адрес.

  5. В области cna-app проверьте итоговые параметры и запишите значения свойств Идентификатор приложения (клиент) и Идентификатора каталога (клиент).

    Снимок экрана: область cna-app на портале Azure

  6. В области cna-app в разделе Управление выберите Сертификаты и секреты и щелкните + Новый секрет клиента.

  7. В области Добавление секрета клиента в текстовом поле Описание введите cna-secret-0. Оставьте в раскрывающемся списке Срок действия значение по умолчанию и нажмите кнопку Добавить.

    Снимок экрана: область добавления секрета клиента на портале Azure

  8. Назад в приложении can-app | Колонка "Сертификаты и секреты " скопируйте значение только что созданного секрета.

    Примечание.

    Перед закрытием этой области обязательно скопируйте значение секрета, так как после закрытия вы больше не сможете получить его. Если так случилось, создайте другой секрет.

    Снимок экрана со значением секрета клиента в области

  9. В приложении can-app | Колонка "Сертификаты и секреты" в вертикальном меню в разделе "Управление" выберите разрешения API.

    Снимок экрана: колонка

  10. В колонке cna-app | Разрешения API выберите + Добавить разрешение, в области Запрос разрешений API перейдите на вкладку Интерфейсы API, используемые моей организацией, в текстовом поле поиска введите База данных Azure OSSRDBMS, а затем в списке результатов выберите База данных Azure OSSRDBMS.

    Снимок экрана: область

  11. В колонке разрешений API запроса выберите делегированные разрешения, установите флажок user_impersonation и нажмите кнопку "Добавить разрешения".

    Снимок экрана: область

  12. Вернитесь в область cna-app | Разрешения API, выберите Предоставить согласие администратора для каталога по умолчанию и при появлении запроса на подтверждение нажмите Да.

    Снимок экрана: колонка

  13. В колонке cna-app | Разрешения API убедитесь, что разрешения предоставлены.

    Снимок экрана: колонка

Реализация простого интегрированного приложения на основе Node.js Microsoft Entra

С помощью приложения, зарегистрированного в клиенте Microsoft Entra, теперь можно продолжить реализацию.

  1. На портале Azure откройте сеанс Bash в Cloud Shell, щелкнув соответствующий значок панели инструментов рядом с текстовым полем поиска.

  2. В сеансе Bash в области Cloud Shell выполните следующие команды, чтобы инициализировать проект Node.js в новом каталоге:

    mkdir -p cna-aadexpress && cd cna-aadexpress
    npm init -y
    
  3. Выполните следующие команды, чтобы добавить необходимые пакеты в зависимости проекта.

    npm install express
    npm install pg
    npm install @azure/msal-node
    
  4. Выполните следующую команду, чтобы создать файл с именем index.js в корне проекта.

    touch ./index.js
    
  5. В редакторе nano откройте файл index.js и добавьте в него следующее содержимое. Позже в этом уроке вы создадите имя приложения, чтобы заменить заполнитель <webapp_name>. Замените <client_id>, <tenant_id><client_secret>и <server_name> (за исключением .postgres.database.azure.com суффикса) фактическими значениями, записанными ранее в этом упражнении:

    Примечание.

    Заполнители <client_id> и <tenant_id> соответствуют свойствам Идентификатор приложения (клиент) и Идентификатор каталога (клиент), которые обсуждались ранее в этом упражнении.

    // Import dependencies
    const express = require("express");
    const msal = require('@azure/msal-node');
    const pg = require('pg');
    const port = process.env.PORT || 8080
    // Initialize express
    const app = express();
    app.use(express.json());
    app.listen(port, () => console.log(`Sample app is listening on port ${port}!`))
    
    // Authentication parameters
    const config = {
    auth: {
            clientId: "<client_id>",
            authority: "https://login.microsoftonline.com/<tenant_id>",
            clientSecret: "<client_secret>"
    },
    system: {
        loggerOptions: {
            loggerCallback(loglevel, message, containsPii) {
            console.log(message);
            },
        piiLoggingEnabled: false,
        logLevel: msal.LogLevel.Verbose,
        }
        }
    };
    
    var outputrows = ""
    
    // Initialize MSAL Node object using authentication parameters
    const cca = new msal.ConfidentialClientApplication(config);
    
    app.get('/auth', (req, res) => {
    
    redirectUri = req.hostname.toLowerCase()=="localhost" ? "http://localhost:8080/redirect" : "https://<webapp_name>.azurewebsites.net/redirect";
    
    // Construct a request object for auth code
    const authCodeUrlParameters = {
        scopes: ["https://ossrdbms-aad.database.windows.net/user_impersonation"],
        redirectUri: redirectUri,
    };
    
    // Request auth code, then redirect
    cca.getAuthCodeUrl(authCodeUrlParameters)
        .then((response) => {
            res.redirect(response);
        }).catch((error) => res.send(error));
    });
    
    app.get('/redirect', (req, res) => {
    redirectUri = req.hostname.toLowerCase()=="localhost" ? "http://localhost:8080/redirect" : "https://<webapp_name>.azurewebsites.net/redirect";
    
    // Use the auth code in redirect request to construct a token request object
    const tokenRequest = {
        code: req.query.code,
        scopes: ["https://ossrdbms-aad.database.windows.net/user_impersonation"],
        redirectUri: redirectUri,
    };
    
    // Exchange the auth code for tokens
    cca.acquireTokenByCode(tokenRequest)
    .then((response) => {
        //res.send(response);
    
        var username = 'adatumgroup1';
        var databasename = 'cnamtinventory';
        var servername = '<server_name>';
        var tablename = 'inventory';
    
        process.env.PGPASSWORD = response.accessToken;
        const connectionString =
            `postgres://${username}@${servername}@${servername}.postgres.database.azure.com:5432/${databasename}?ssl=true`;
    
        res.write(connectionString + "\n\n");
        res.write(response.accessToken + "\n\n");
    
        const client = new pg.Client(connectionString);
        client.connect(err => {
            if (err) throw err;
            else {
                queryDatabase(response.account.name);
            }
        });
    
        function queryDatabase(tenant_id) {
            console.log(`Running query to PostgreSQL server: ${servername}`);
            switch (tenant_id) {
                case "adatumuser1":
                    id = "1";
                    break;
                case "contosouser1":
                    id = "2";
                    break;
            }
            const query = `SELECT * FROM ${tablename} WHERE tenant_id = ${id};`;
            client.query(query)
            .then(qresponse => {
                const rows = qresponse.rows;
                rows.map(row => {
                    var singlerow = `${JSON.stringify(row)}`;
                    console.log(singlerow);
                    outputrows += singlerow + "\n";
                });
                res.write(outputrows);
                res.end();
                process.exit();
            })
            .catch(err => {
                 console.log(err);
            });
        }
      }).catch((error) => res.write(error));
    });
    

    Примечание.

    Мультитенантное зарегистрированное приложение Microsoft Entra использует URL-адрес универсального центра, но в вашем случае необходимо использовать URL-адрес authority: "https://login.microsoftonline.com/common"одного клиента, содержащий идентификатор клиента.

    Примечание.

    Помните, что после развертывания приложения необходимо заменить значение URL-адреса ПЕРЕНАПРАВЛЕНия фактическим URL-адресом перенаправления.

  6. Используйте редактор nano, чтобы изменить файл package.json в корне проекта и заменить его следующим содержимым:

    {
      "name": "node-express",
      "version": "1.0.0",
      "description": "Node.js express sample",
      "main": "index.js",
      "scripts": {
        "start": "node index.js"
      },
      "author": "",
      "license": "ISC",
      "dependencies": {
        "@azure/msal-node": "^1.1.0",
        "body-parser": "^1.19.0",
        "express": "^4.17.1",
        "http": "0.0.0",
        "morgan": "^1.10.0",
        "pg": "^8.6.0"
      }
    }
    

Проверка функциональности приложения Node.js

Наконец, вы готовы к тестированию функциональности веб-приложения. Хотя вы можете контейнеризовать его, для простоты мы развернем его в Службе приложений Azure. Это позволит быстро проверить его функциональность и убедиться, что помещение в контейнер работает.

  1. В сеансе Bash на панели Cloud Shell выполните следующие команды, чтобы создать группу ресурсов, в которой будет размещаться веб-приложение Azure, в котором будет развернуто приложение Node.js Express:

    RG1NAME=postgresql-db-RG
    LOCATION=$(az group show --resource-group $RG1NAME --query location --output tsv)
    RG2NAME=cna-aadexpress-RG
    az group create --name $RG2NAME --location $LOCATION
    
  2. Выполните следующие команды, чтобы создать бесплатный план службы приложений Azure, в котором будет размещено новое веб-приложение Azure.

    SPNAME=aadexpress-sp
    az appservice plan create --name $SPNAME --resource-group $RG2NAME --sku F1 --is-linux
    
  3. Выполните следующие команды, чтобы создать новое веб-приложение Azure на основе Node.js.

    WEBAPPNAME=aadexpress$RANDOM$RANDOM
    az webapp create --name $WEBAPPNAME --resource-group $RG2NAME --plan $SPNAME --runtime "NODE|16-lts"
    
  4. Выполните следующие команды, чтобы узнать имя веб-приложения.

    echo $WEBAPPNAME
    
  5. Используйте редактор nano, чтобы открыть файл index.js , заменить два <webapp_name> заполнителя именем, указанным на предыдущем шаге, сохранить изменения и закрыть файл.

    Примечание.

    Обязательно замените оба заполнителя <webapp_name>.

  6. Откройте другую вкладку в окне веб-браузера, в котором отображается портал Azure, перейдите к порталу Azure и при появлении запроса выполните вход, чтобы получить доступ к подписке Azure, которую вы будете использовать в этом модуле.

  7. В портал Azure используйте текстовое поле поиска ресурсов, служб и документов для поиска идентификатора Microsoft Entra и в списке результатов выберите идентификатор Microsoft Entra.

  8. В колонке Microsoft Entra перейдите к колонке Регистрация приложений, выберите запись can-app в вертикальном меню в разделе "Управление" выберите "Проверка подлинности".

  9. В области cna-app | Аутентификация измените значение URI перенаправления, чтобы оно совпадало с записью, записанной в файле index.js, и сохраните изменения.

    Снимок экрана: колонка

  10. Вернитесь на вкладку веб-браузера с сеансом bash в области Cloud Shell и выполните следующие команды, чтобы инициализировать локальный репозиторий Git и зафиксировать все изменения в основной ветви.

    cd ~/cna-aadexpress
    git config --global user.email "user1@adatum.com"
    git config --global user.name "Adatum User1"
    git init
    git add -A
    git commit -m "Initial Commit"
    
  11. Выполните следующие команды, чтобы настроить учетные данные для развертывания на уровне пользователя:

    DEPLOYMENTUSER=m06User$RANDOM
    DEPLOYMENTPASS=m06Pass$RANDOM$RANDOM
    az webapp deployment user set --user-name $DEPLOYMENTUSER --password $DEPLOYMENTPASS
    
  12. Выполните следующие команды, чтобы показать учетные данные развертывания на уровне пользователя, и запишите их значения, так как они понадобятся вам позже в этой задаче.

    echo $DEPLOYMENTUSER
    echo $DEPLOYMENTPASS
    
  13. Выполните следующие команды, чтобы определить URL-адрес развертывания веб-приложения Azure, который будет использоваться в качестве целевого объекта команды git push.

    RG2NAME=cna-aadexpress-RG
    WEBAPPNAME=$(az webapp list --resource-group $RG2NAME --query "[0].name" --output tsv)
    DEPLOYMENTURL=$(az webapp deployment source config-local-git --name $WEBAPPNAME --resource-group $RG2NAME --output tsv)
    
  14. Выполните следующую команду, чтобы настроить удаленный репозиторий с именем azure, представляющий URL-адрес развертывания, определенный на предыдущем шаге.

    git remote add azure $DEPLOYMENTURL
    
  15. Выполните следующие команды, чтобы создать тестовую ветвь на основе основной ветви и отправить его содержимое в веб-приложение Azure (при появлении запроса на пароль, который является частью учетных данных развертывания на уровне пользователя, записанных ранее в этой задаче):

    git checkout -b test
    git commit -a -m "testing"
    git push --set-upstream azure test
    
  16. Закройте область Cloud Shell.

  17. Откройте другое окно веб-браузера в режиме инкогнито или InPrivate, перейдите на портал Azure и выполните вход с помощью учетной записи пользователя adatumuser1, созданного в предыдущем упражнении.

  18. В портал Azure используйте текстовое поле поиска, служб и документов в начале страницы портал Azure для поиска Служба приложений.

  19. В области Службы приложений в списке экземпляров Службы приложений выберите запись, представляющую только что развернутое веб-приложение Azure.

  20. В колонке, отображающей свойства веб-приложения, в разделе Essentials скопируйте значение URL-адреса домена по умолчанию.

  21. Откройте другую вкладку в том же окне браузера и в поле поиска введите https://, вставьте URL-адрес, скопированный в буфер обмена, добавьте суффикс /auth и нажмите клавишу ВВОД.

    Примечание.

    URL-адрес должен иметь следующий формат: https://<webapp_name>.azurewebsites.net/auth.

  22. Убедитесь, что полученная веб-страница состоит из сведений о проверке подлинности Microsoft Entra для текущего вошедшего пользователя (выходные данные могут отличаться).

Результаты

Поздравляем! Вы выполнили второе упражнение этого модуля. В этом упражнении вы установили База данных Azure для PostgreSQL в модели развертывания одного сервера, создали базу данных с примерами данных инвентаризации, интегрировали сервер с идентификатором Microsoft Entra и реализовали простое приложение на основе Node.js, которое запрашивает базу данных, используя проверку подлинности Microsoft Entra.