Cvičení – implementace víceklientských dat
Toto cvičení vás provede procesem:
- Instalace Služby Azure Database for PostgreSQL v modelu nasazení serveru
- Vytvoření databáze s ukázkovými daty inventáře
- Integrace serveru s Microsoft Entra ID.
- Implementace jednoduché aplikace založené na Node.js, která dotazuje databázi tím, že spoléhá na ověřování Microsoft Entra.
Poznámka:
Toto cvičení znázorňuje zjednodušený přístup k poskytování podpory více tenantů emulací víceklientské funkčnosti modelu nasazení Hyperscale pro Azure Database for PostgreSQL. Poskytuje také zjednodušený přístup k implementaci ověřování Microsoft Entra ve scénářích s více tenanty tím, že spoléhá na funkce Microsoft Entra B2B. Microsoft Entra ID přímo podporuje víceklientských aplikací, ale jejich podrobné pokrytí je mimo rozsah tohoto modulu.
V tomto cvičení:
- Vytvořte instanci serveru Azure Database for PostgreSQL.
- Připojení k serveru Azure Database for PostgreSQL.
- Vytvořte databázi a ukázkové tabulky.
- Integrujte server Azure Database for PostgreSQL s ID Microsoft Entra.
- Registrace aplikace pomocí Microsoft Entra ID.
- Implementujte jednoduchou aplikaci založenou na Microsoft Entra integrated Node.js.
- Ověřte funkčnost aplikace založené na Node.js.
Požadavky
K provedení tohoto cvičení budete potřebovat:
- Předplatné Azure.
- Účet Microsoft nebo účet Microsoft Entra s rolí Globální Správa istrator v tenantovi Microsoft Entra přidruženém k předplatnému Azure a s rolí Vlastník nebo Přispěvatel v předplatném Azure.
- Abyste dokončili první cvičení tohoto modulu.
Vytvoření instance serveru Azure Database for PostgreSQL
Začnete vytvořením instance serveru Azure Database for PostgreSQL:
V případě potřeby spusťte webový prohlížeč, přejděte na web Azure Portal a přihlaste se, abyste získali přístup k předplatnému Azure, které budete v tomto modulu používat.
Pomocí textového pole Prohledat prostředky, služby a dokumenty na začátku stránky webu Azure Portal vyhledejte Službu Azure Database for PostgreSQL a v seznamu výsledků v části Služby vyberte Azure Database for PostgreSQL.
V okně serverů Azure Database for PostgreSQL vyberte + Vytvořit.
V okně vybrat možnost nasazení Azure Database for PostgreSQL na dlaždici Azure Database for PostgreSQL pro typ prostředku vyberte Jeden server.
Vyberte Vytvořit.
Na kartě Základy v okně Jednoúčelový server nakonfigurujte následující nastavení a pak vyberte Zkontrolovat a vytvořit a ponechte všechna ostatní nastavení s jejich výchozími hodnotami:
Nastavení Konfigurace Předplatné Vyberte název předplatného Azure, které budete v tomto modulu používat. Skupina prostředků Vytvořte novou skupinu prostředků s názvem postgresql-db-RG. Název serveru Zadejte jedinečný název skládající se z malých písmen, číslic nebo pomlček a začněte písmenem. Zdroj dat Vyberte Žádná. Umístění Vyberte oblast Azure, která je nejblíže umístění testovacího prostředí, kde můžete vytvářet instance Azure Database for PostgreSQL. Verze Vyberte 11. Výpočty + úložiště Vyberte odkaz Konfigurovat server. V okně Konfigurovat vyberte Basic, nastavte hodnotu virtuálního jádra na 1 a Úložiště na 5 GB a pak vyberte OK. Uživatelské jméno správce Zadejte studenta. Password Zadejte Pa55w0rd1234. Na kartě Zkontrolovat a vytvořit v okně Jednoúčelový server vyberte Vytvořit.
Počkejte na dokončení zřizování. Může to trvat asi pět minut.
Poznámka:
Proces zřizování automaticky vytvoří databázi s názvem postgres v rámci cílového serveru.
Připojení k serveru Azure Database for PostgreSQL
Se zřízeným serverem Azure Database for PostgreSQL se k němu připojíte pomocí nástroje psql .
V okně Přehled Serveru Microsoft.PostgreSQLServer.createPostgreSqlServer vyberte Přejít k prostředku.
V okně Nasazení v vertikální nabídce v části Nastavení vyberte Připojení zabezpečení.
V okně zabezpečení Připojení nastavte Možnost Povolit přístup ke službám Azure na Ano, vyberte + Přidat IP adresu klienta, nastavte Vynutit připojení SSL na ZAKÁZÁNO a pak vyberte Uložit.
Poznámka:
Tato nastavení umožní připojení k databázi z počítače a z aplikací spuštěných v Azure.
Poznámka:
Zakázání vynucení SSL je určené ke zjednodušení následných cvičení. Obecně platí, že toto nastavení byste měli ponechat povolené.
V okně prohlížeče zobrazující portál Azure Portal s oknem Nasazení v vertikální nabídce vyberte Přehled.
V části Základy identifikujte položky vedle názvu serveru a Správa popisky uživatelského jména a poznamenejte si jejich hodnoty.
Poznámka:
Všimněte si, že uživatelské jméno obsahuje @ symbol následovaný názvem serveru, který jste zadali v předchozím úkolu.
V okně prohlížeče zobrazující portál Azure Portal s oknem jednoúčelového serveru Azure Database for PostgreSQL vyberte ve svislé nabídce v části Nastavení řetězec Připojení ion.
V seznamu připojovací řetězec zkopírujte hodnotu připojovací řetězec psql a poznamenejte si ji, abyste ji mohli použít později v tomto cvičení.
Poznámka:
Připojovací řetězec má následující syntaxi, kde
<server_name>
zástupný symbol představuje název serveru, který jste identifikovali dříve v této úloze:psql "host=<server_name>.postgres.database.azure.com port=5432 dbname={your_database} user=student@<server_name> password={your_password} sslmode=require"
Na webu Azure Portal otevřete relaci Bash cloud Shellu tak, že na panelu nástrojů vedle vyhledávacího textového pole vyberete její ikonu.
V relaci Bash v podokně Cloud Shell vložte hodnotu psql připojovací řetězec ze schránky, upravte ji tak, aby odpovídala následujícímu příkazu, a spusťte ji pro připojení k databázi postgres hostované na nově nasazené instanci serveru Azure Database for PostgreSQL. Hodnota zástupného symbolu
<server_name>
bude již zahrnuta v připojovací řetězec, kterou jste vložili ze schránky:psql "host=<server_name>.postgres.database.azure.com port=5432 dbname=postgres user=student@<server_name>.postgres.database.azure.com password=Pa55w0rd1234 sslmode=require"
Poznámka:
Po úspěšném připojení se zobrazí
postgres=>
výzva.
Vytvoření databáze a ukázkových tabulek
V podokně Cloud Shell na příkazovém
postgres=>
řádku spusťte následující příkaz, který vytvoří novou databázi s názvem cnamtinventory:CREATE DATABASE cnamtinventory;
Spuštěním následujícího příkazu přepněte připojení k nově vytvořené databázi:
\c cnamtinventory
Spuštěním následujícího příkazu vytvořte tabulku tenantů:
CREATE TABLE tenants ( id bigserial PRIMARY KEY, name text NOT NULL, created_at TIMESTAMP DEFAULT NOW()::date, updated_at TIMESTAMP DEFAULT NOW()::date );
Spuštěním následujícího příkazu vytvořte tabulku inventáře:
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;
Poznámka:
Data se dělí na základě hodnoty sloupce kalendářního data.
Spuštěním následujícího příkazu ověřte, že se tabulka úspěšně vytvořila:
\dt
Spuštěním následujícího příkazu načtěte ukázková data do tabulky tenantů:
INSERT INTO tenants (id, name) VALUES (1, 'adatum'); INSERT INTO tenants (id, name) VALUES (2, 'contoso');
Spuštěním následujícího příkazu načtěte ukázková data do tabulky inventáře:
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);
Spuštěním následujícího příkazu ověřte, že tabulka inventáře obsahuje vložená data:
SELECT * FROM inventory;
Zavřete podokno Cloud Shellu.
Integrace serveru Azure Database for PostgreSQL s ID Microsoft Entra
Pokud chcete integrovat instanci serveru Azure Database for PostgreSQL s ID Microsoft Entra, musíte jako určený správce serveru zadat uživatelský účet Microsoft Entra. Použijete pro tento účel uživatelský účet adatumadmin1 , který jste vytvořili v předchozím úkolu. Musíte se přihlásit k serveru pomocí daného uživatelského účtu. V tomto okamžiku budete moct vytvořit uživatele databáze založené na ID Microsoft Entra a přiřadit jim databázové role. Použijete pro objekty adatumuser1, adatumgroup1 a contosouser1 Microsoft Entra, které jste vytvořili v předchozím cvičení.
V okně prohlížeče zobrazující portál Azure Portal s oknem serveru Azure Database for PostgreSQL vyberte ve svislé nabídce v části Nastavení správce služby Active Directory a potom na panelu nástrojů vyberte Nastavit správce.
V okně správce služby Active Directory vyberte v seznamu uživatelských účtů Microsoft Entra uživatelský účet adatumadmin1, který jste vytvořili v předchozím cvičení, vyberte Vybrat a pak vyberte Uložit.
Otevřete jiné okno webového prohlížeče v režimu Incognito/InPrivate, přejděte na web Azure Portal a přihlaste se pomocí uživatelského účtu adatumadmin1 (s heslem Pa55w.rd1234 ), které jste vytvořili v předchozím cvičení.
Na webu Azure Portal otevřete Cloud Shell tak, že na panelu nástrojů vedle vyhledávacího textového pole vyberete jeho ikonu.
Po zobrazení výzvy k výběru Bash nebo PowerShellu vyberte Bash a po zobrazení zprávy Nemáte připojené žádné úložiště vyberte Vytvořit úložiště.
Spuštěním následujících příkazů v relaci Bash v podokně Cloud Shell načtěte a zobrazte přístupový token Microsoft Entra potřebný pro přístup ke službě Azure Database for PostgreSQL:
FULL_TOKEN=$(az account get-access-token --resource-type oss-rdbms) echo $FULL_TOKEN
Poznámka:
Příkaz vygeneruje výstup, který obsahuje token kódování Base 64, který identifikuje ověřeného uživatele pro prostředek Azure Database for PostgreSQL.
Výstup používá následující formát:
{ "accessToken": "eyJ0eXAiOiJKV1QiLDJhbGciOiJSUzI1NiIsIng1dCI6Im5PbzNaRHJPRFhFSzFqS1doWHNsSFJfS1hFZyIsImtpZCI6Im5PbzNaRHJPRFhFSzFqS1doWHNsSFJfS1hFZyJ9.eyJhdWQiOiJodHRwczovL29zc3JkYm1zLWFhZC5kYXRhYmFzZS53aW5kb3dzLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0L2E2MTM5NTE0LTQxYTUtNDEyMy05ODFhLWVlN2JiOWU2YTNiNC8iLCJpYXQiOjE2MjE2MTc0NjUsIm5iZiI6MTYyMTYxNzQ2NSwiZXhwIjoxNjIxNjIxMzY0LCJhY3IiOiIxIiwiYWlvIjoiQVRRQXkvOFRBQUFBU1I5cXdVcm9KVVpmWEJabHY1NzRUenpmeGZFUlo1SXNDV3Z1aDVEOVBGWnZsL09SYWYzTGg3Zmx4NEFVaFpkVSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiJiNjc3YzI5MC1jZjRiLTRhOGUtYTYwZS05MWJhNjUwYTRhYmUiLCJhcHBpZGFjciI6IjIiLCJpcGFkZHIiOiIxNDIuMTA1LjQ4LjUxIiwibmFtZSI6ImFkYXR1bWFkbWluMSIsIm9pZCI6Ijc2ZTdmYWI5LTZiOTItNGQzZi1hOGI5LWY1NWNhNDQyYzZiMSIsInB1aWQiOiIxMDAzMjAwMTQ0RTNDMDBBIiwicmgiOiIwLkFYd0FGSlVUcHFWQkkwR1lHdTU3dWVhanRKRENkN1pMejQ1S3BnNlJ1bVVLU3I1OEFNay4iLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJvNmhNMWlHXzM3MExaQk92UlpUQjBYeEdjSmpaOUVmN21lc1N2RkJYY3FFIiwidGlkIjoiYTYxMzk1MTQtNDFhNS00MTIzLTk4MWEtZWU3YmI5ZTZhM2I0IiwidW5pcXVlX25hbWUiOiJhZGF0dW1hZG1pbjFAbGl2ZWlkMjE3b3V0bG9vay5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZGF0dW1hZG1pbjFAbGl2ZWlkMjE3b3V0bG9vay5vbm1pY3Jvc29mdC5jb20iLCJ1dGkiOiJJdE81VndoU2lVV0o0UUZNQ04xQUFRIiwidmVyIjoiMS4wIn0.fFV3s2OjpVU52_SA8-atIDdkLN4onLgPmYrxa5eNCbuF0VbVOA5a9Ifv66H5a__6lMiLoV8n9EgTV4CpsLmvn6JFjAD9aHyEBkS2_iL_Rx-KCmlc7Vr6UHezrlrA3skf8oq3yb2Zqy_A3_kOrsnFgX8NP5uWoMmTzjWGTw3rOfjERJ7PowQC60nzlF1uCRDKIWw62SW4xiDQj23DSLDbkfUiG_Z9Swbw4DuMPTPeUVwz9AWhmg8lrqt5oawhKB-OMcpuwSf1-rE1cf2w54uthU6764DBEf5MVt8K95AKW0rey888znrIGKT-6yFenYUZZjL1aJ-jz8OIyNjuQK73XQ", "expiresOn": "2021-05-21 18:22:44.000000", "subscription": "d15bacf3-b17b-4ad5-a913-5fb904bd2f71", "tenant": "a6239514-41a5-4123-981a-ee7bb9e6a3b4", "tokenType": "Bearer" }
Spuštěním následujícího příkazu nastavte hodnotu proměnné PGPASSWORD na hodnotu přístupového tokenu z výstupu příkazu, který jste spustili v předchozím kroku:
export PGPASSWORD=$(echo $FULL_TOKEN | jq -r '.accessToken')
Spuštěním následujícího příkazu se připojte k databázi cnamtinventory pomocí nástroje psql a pomocí ověřování Microsoft Entra (nahraďte
<server_name>
zástupný symbol názvem serveru, který jste identifikovali dříve v tomto cvičení):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"
Poznámka:
Po úspěšném připojení by se měla zobrazit
cnamtinventory=>
výzva.Na příkazovém
cnamtinventory=>
řádku spusťte následující příkaz, který vytvoří roli databáze odpovídající skupině adatumgroup1 Microsoft Entra, kterou jste vytvořili v předchozím cvičení:CREATE ROLE "adatumgroup1" WITH LOGIN IN ROLE azure_ad_user;
Spuštěním následujícího příkazu ověřte, že se role úspěšně vytvořily:
SELECT rolname FROM pg_roles;
Spuštěním následujícího příkazu udělte oprávnění SELECT v tabulce inventáře adatumgroup1, kterou jste vytvořili v předchozím cvičení:
GRANT SELECT ON inventory TO adatumgroup1;
Odhlaste se jako uživatelský účet adatumadmin1 a zavřete okno webového prohlížeče v režimu Incognito/InPrivate.
Registrace aplikace pomocí Microsoft Entra ID
Pokud chcete implementovat ukázkovou aplikaci založenou na Node.js, která pro přístup k databázi Azure Database for PostgreSQL používá ověřování Microsoft Entra, musíte vytvořit objekt aplikace Microsoft Entra a odpovídající objekt zabezpečení. To umožní aplikaci založenou na Node.js zosobnit uživatele Microsoft Entra při přístupu k databázovým objektům.
Na webu Azure Portal pomocí textového pole Hledat prostředky, služby a dokumenty vyhledejte ID Microsoft Entra a v seznamu výsledků vyberte Microsoft Entra ID.
V okně Microsoft Entra v vertikální nabídce v části Spravovat vyberte Registrace aplikací.
V okně Registrace aplikací vyberte + Nová registrace.
V okně Zaregistrovat aplikaci do textového pole Název zadejte can-app. V části Podporované typy účtů se ujistěte, že je vybraná možnost Účty v tomto adresáři organizace (pouze výchozí adresář – jeden tenant). V části Identifikátor URI přesměrování (volitelné) nastavte položku Web na
http://localhost:8080/redirect
položku a pak vyberte Zaregistrovat.Poznámka:
Máte možnost nakonfigurovat podporu víceklientů pro vaše registrované aplikace Microsoft Entra. Podrobné pokrytí tohoto přístupu je však mimo rozsah tohoto modulu.
Poznámka:
Po nasazení aplikace budete muset upravit hodnotu identifikátoru URI přesměrování (volitelné) tak, aby odrážela její skutečnou adresu URL.
V okně can-app zkontrolujte výsledné nastavení a poznamenejte si hodnoty ID aplikace (klienta) a vlastností ID adresáře (tenanta).
V okně can-app v části Spravovat vyberte Certifikáty a tajné kódy a vyberte + Nový tajný klíč klienta.
V okně Přidat tajný klíč klienta do textového pole Popis zadejte can-secret-0. Ponechte položku rozevíracího seznamu Konec platnosti s výchozí hodnotou a vyberte Přidat.
Zpět na aplikaci can-app | Okno Certifikáty a tajné kódy zkopírujte hodnotu nově generovaného tajného kódu.
Poznámka:
Před přechodem z tohoto okna nezapomeňte zkopírovat hodnotu tajného kódu, protože v tomto okamžiku ji už nebudete moct načíst. V takovém případě vytvořte další tajný kód.
V aplikaci can-app | V okně Certifikáty a tajné kódy v vertikální nabídce v části Spravovat vyberte oprávnění rozhraní API.
V aplikaci can-app | Okno Oprávnění rozhraní API, vyberte + Přidat oprávnění, v okně Požádat o oprávnění rozhraní API vyberte rozhraní API, která moje organizace používá, ve vyhledávacím textovém poli zadejte databázi Azure OSSRDBMS a potom v seznamu výsledků vyberte databázi Azure OSSRDBMS.
V okně Požádat o oprávnění rozhraní API vyberte Delegovaná oprávnění, zaškrtněte políčko user_impersonation a pak vyberte Přidat oprávnění.
Zpět na aplikaci can-app | Okno Oprávnění rozhraní API, vyberte Udělit souhlas správce pro výchozí adresář a po zobrazení výzvy k potvrzení vyberte Ano.
V aplikaci can-app | Okno Oprávnění rozhraní API ověřte, že byla udělena oprávnění.
Implementace jednoduché aplikace založené na Microsoft Entra integrated Node.js
S aplikací zaregistrovanou v tenantovi Microsoft Entra teď můžete pokračovat v implementaci.
Na webu Azure Portal spusťte relaci Bash v Cloud Shellu tak, že na panelu nástrojů vedle vyhledávacího textového pole vyberete její ikonu.
V relaci Bash v podokně Cloud Shell spusťte následující příkazy, které inicializují projekt Node.js v novém adresáři:
mkdir -p cna-aadexpress && cd cna-aadexpress npm init -y
Spuštěním následujících příkazů přidejte požadované balíčky do závislosti projektu:
npm install express npm install pg npm install @azure/msal-node
Spuštěním následujícího příkazu vytvořte soubor s názvem index.js v kořenovém adresáři projektu:
touch ./index.js
Pomocí editoru nano otevřete soubor index.js a přidejte následující obsah. Později v této lekci vytvoříte název aplikace, který nahradí zástupný symbol
<webapp_name>
. Nahraďte<client_id>
,<tenant_id>
,<client_secret>
a<server_name>
(s výjimkou.postgres.database.azure.com
přípony) skutečnými hodnotami, které jste si poznamenali dříve v tomto cvičení:Poznámka:
Zástupné symboly
<client_id>
a<tenant_id>
odpovídají ID aplikace (klienta) a vlastnostem ID adresáře (tenanta) odkazovaným dříve v tomto cvičení.// 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)); });
Poznámka:
Víceklientský zaregistrovaný aplikace Microsoft Entra používá obecnou adresu URL
authority: "https://login.microsoftonline.com/common"
autority, ale v případě potřeby musíte použít adresu URL s jedním tenantem, která obsahuje ID vašeho tenanta.Poznámka:
Mějte na paměti, že po nasazení aplikace budete muset nahradit hodnotu adresy URL REDIRECT její skutečnou adresou URL pro přesměrování.
Pomocí editoru nano upravte soubor package.json v kořenovém adresáři projektu a nahraďte ho následujícím obsahem:
{ "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" } }
Ověření funkčnosti aplikace založené na Node.js
Konečně jste připraveni otestovat funkčnost vaší webové aplikace. I když byste ji mohli kontejnerizovat kvůli jednoduchosti, nasadíte ji do služby Aplikace Azure Service. Tím získáte rychlý způsob, jak ověřit jeho funkčnost a zajistit, aby kontejnerizace byla proveditelnou možností.
V relaci Bash v podokně Cloud Shell spusťte následující příkazy a vytvořte skupinu prostředků, která bude hostovat webovou aplikaci Azure, do které nasadíte aplikaci 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
Spuštěním následujících příkazů vytvořte plán služby Aplikace Azure úrovně Free, který bude hostovat novou webovou aplikaci Azure:
SPNAME=aadexpress-sp az appservice plan create --name $SPNAME --resource-group $RG2NAME --sku F1 --is-linux
Spuštěním následujících příkazů vytvořte novou webovou aplikaci Azure založenou na Node.js:
WEBAPPNAME=aadexpress$RANDOM$RANDOM az webapp create --name $WEBAPPNAME --resource-group $RG2NAME --plan $SPNAME --runtime "NODE|16-lts"
Spuštěním následujících příkazů identifikujte název webové aplikace:
echo $WEBAPPNAME
Pomocí editoru nano otevřete soubor index.js , nahraďte dva
<webapp_name>
zástupné symboly názvem, který jste identifikovali v předchozím kroku, uložte změny a zavřete soubor.Poznámka:
Nezapomeňte nahradit oba
<webapp_name>
zástupné symboly.Otevřete další kartu v okně webového prohlížeče s webem Azure Portal, přejděte na web Azure Portal a v případě výzvy se přihlaste, abyste získali přístup k předplatnému Azure, které budete v tomto modulu používat.
Na webu Azure Portal pomocí textového pole Hledat prostředky, služby a dokumenty vyhledejte ID Microsoft Entra a v seznamu výsledků vyberte Microsoft Entra ID.
V okně Microsoft Entra přejděte do okna Registrace aplikací, vyberte položku can-app, ve svislé nabídce v části Spravovat vyberte Ověřování.
V aplikaci can-app | Okno Ověřování , upravte hodnotu identifikátoru URI přesměrování tak, aby odpovídala položce, kterou jste aktualizovali v souboru index.js , a uložte změnu.
Přepněte zpět na kartu webového prohlížeče zobrazující relaci Bash v podokně Cloud Shell a spuštěním následujících příkazů inicializujete místní úložiště Git a potvrdíte všechny změny v hlavní větvi:
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"
Spuštěním následujících příkazů nastavte přihlašovací údaje nasazení na úrovni uživatele:
DEPLOYMENTUSER=m06User$RANDOM DEPLOYMENTPASS=m06Pass$RANDOM$RANDOM az webapp deployment user set --user-name $DEPLOYMENTUSER --password $DEPLOYMENTPASS
Spuštěním následujících příkazů identifikujte přihlašovací údaje nasazení na úrovni uživatele a poznamenejte si jejich hodnotu, protože je budete potřebovat později v této úloze:
echo $DEPLOYMENTUSER echo $DEPLOYMENTPASS
Spuštěním následujících příkazů identifikujte adresu URL nasazení webové aplikace Azure, kterou použijete jako cíl
git push
příkazu: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)
Spuštěním následujícího příkazu nakonfigurujte vzdálené úložiště s názvem Azure, které představuje adresu URL nasazení, kterou jste identifikovali v předchozím kroku:
git remote add azure $DEPLOYMENTURL
Spuštěním následujících příkazů vytvořte testovací větev založenou na hlavní větvi a odešlete její obsah do webové aplikace Azure (po zobrazení výzvy k zadání hesla, které je součástí přihlašovacích údajů nasazení na úrovni uživatele, které jste si poznamenali dříve v této úloze):
git checkout -b test git commit -a -m "testing" git push --set-upstream azure test
Zavřete podokno Cloud Shellu.
V režimu Incognito/InPrivate otevřete další okno webového prohlížeče, přejděte na web Azure Portal a přihlaste se pomocí uživatelského účtu adatumuser1 , který jste vytvořili v předchozím cvičení.
Na webu Azure Portal pomocí textového pole Hledat prostředky, služby a dokumenty na začátku stránky webu Azure Portal vyhledejte App Services.
V okně App Services v seznamu instancí služby App Service vyberte položku představující nově nasazenou webovou aplikaci Azure.
V okně zobrazující vlastnosti webové aplikace zkopírujte v části Základy hodnotu výchozí adresy URL domény .
Otevřete další kartu ve stejném okně prohlížeče a do vyhledávacího pole, zadejte https://, vložte adresu URL, kterou jste právě zkopírovali do schránky, přidejte příponu /auth a vyberte Enter.
Poznámka:
Adresa URL by měla mít následující formát:
https://<webapp_name>.azurewebsites.net/auth
Ověřte, že se výsledná webová stránka skládá z ověřovacích informací Microsoft Entra pro aktuálně přihlášeného uživatele (výstup se může lišit).
Výsledky
Blahopřejeme! Dokončili jste druhé cvičení tohoto modulu. V tomto cvičení jste nainstalovali Azure Database for PostgreSQL do modelu nasazení s jedním serverem, vytvořili databázi s ukázkovými daty inventáře, integrovali server s Microsoft Entra ID a implementovali jednoduchou aplikaci založenou na Node.js, která dotazuje databázi tím, že spoléhá na ověřování Microsoft Entra.