App Service poskytuje vysoce škálovatelnou službu samoobslužného hostování webů v Azure. Poskytuje také managed identity pro vaši aplikaci, což je řešení pro zabezpečení přístupu k databázím Azure, včetně:
Spravované identity ve službě App Service zvyšují zabezpečení vaší aplikace tím, že z aplikace odstraňují tajné kódy, jako jsou přihlašovací údaje v připojovacích řetězcích. V tomto kurzu se dozvíte, jak se z App Service připojit k výše uvedeným databázím pomocí spravovaných identit.
Co se naučíte:
- Nakonfigurujte Microsoft Entra uživatele jako správce pro vaši databázi Azure.
- Připojte se k databázi jako uživatel Microsoft Entra.
- Nakonfigurujte spravovanou identitu přiřazenou systémem nebo přiřazenou uživatelem pro aplikaci app Service.
- Udělte spravované identitě přístup k databázi.
- Připojte se ke Azure databázi z kódu (.NET Framework 4.8, .NET 6, Node.js, Python, Java) pomocí spravované identity.
- Připojte se k Azure databázi z vývojového prostředí pomocí Microsoft Entra uživatele.
Pokud účet Azure nemáte, vytvořte si účet free než začnete.
Požadavky
- Vytvořte aplikaci ve službě App Service na základě .NET, Node.js, Python nebo Java.
- Vytvořte databázový server s Azure SQL Database, Azure Database for MySQL nebo Azure Database for PostgreSQL.
- Měli byste být obeznámeni se standardním vzorem připojení (s uživatelským jménem a heslem) a úspěšně se připojit z aplikace App Service k databázi podle vašeho výběru.
Připravte prostředí na Azure CLI.
1. Nainstalujte rozšíření bez hesla pro Service Connector
Nainstalujte nejnovější rozšíření bez hesla konektoru Service Connector pro Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade
Poznámka:
Spuštěním serviceconnector-passwordless příkazu az versionzkontrolujte, jestli je verze rozšíření 2.0.2 nebo novější. V případě potřeby nejprve upgradujte Azure CLI a pak upgradujte rozšíření.
2. Vytvoření připojení bez hesla
Dále vytvořte připojení bez hesla pomocí konektoru Service Connector.
Návod
Portál Azure vám může pomoct vytvořit následující příkazy. Na portálu Azure přejděte na prostředek Azure App Service, v nabídce vlevo vyberte Konektor služby a v nabídce vlevo vyberte Create. Vyplňte formulář všemi požadovanými parametry. Azure automaticky vygeneruje příkaz pro vytvoření připojení, který můžete zkopírovat do rozhraní příkazového řádku nebo spustit v Azure Cloud Shell.
Následující příkaz Azure CLI používá parametr --client-type.
Volitelně spusťte příkaz az webapp connection create sql -h pro získání podporovaných typů klientů.
Zvolte typ klienta a spusťte odpovídající příkaz. Nahraďte následující zástupné symboly vlastními informacemi.
az webapp connection create sql \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <sql-group-name> \
--server <sql-name> \
--database <database-name> \
--user-identity client-id=<client-id> subs-id=<subscription-id> \
--client-type <client-type>
az webapp connection create sql \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <sql-name> \
--database <database-name> \
--system-identity \
--client-type <client-type>
Poznámka:
Pro Azure Database for MySQL – flexibilní server musíte nejprve manuálně nastavit ověřování Microsoft Entra, což vyžaduje samostatnou spravovanou identitu přiřazenou uživatelem a konkrétní oprávnění Microsoft Graph. Tento krok nejde automatizovat.
Ručně nastavte ověřování Microsoft Entra pro Azure Database for MySQL – flexibilní server.
Volitelně spusťte příkaz az webapp connection create mysql-flexible -h pro získání podporovaných typů klientů.
Zvolte typ klienta a spusťte odpovídající příkaz. Následující příkaz Azure CLI používá parametr --client-type.
az webapp connection create mysql-flexible \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <mysql-name> \
--database <database-name> \
--user-identity client-id=XX subs-id=XX mysql-identity-id=$IDENTITY_RESOURCE_ID \
--client-type <client-type>
az webapp connection create mysql-flexible \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <mysql-name> \
--database <database-name> \
--system-identity mysql-identity-id=$IDENTITY_RESOURCE_ID \
--client-type <client-type>
Následující příkaz Azure CLI používá parametr --client-type.
Volitelně spuštěním příkazu az webapp connection create postgres-flexible -h získejte seznam všech podporovaných typů klientů.
Zvolte typ klienta a spusťte odpovídající příkaz.
az webapp connection create postgres-flexible \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <postgresql-name> \
--database <database-name> \
--user-identity client-id=XX subs-id=XX \
--client-type java
az webapp connection create postgres-flexible \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <postgresql-name> \
--database <database-name> \
--system-identity \
--client-type <client-type>
Udělení oprávnění k předem vytvořeným tabulkám
Dále, pokud jste před použitím konektoru služby vytvořili tabulky a sekvence v PostgreSQL Flexible Serveru, připojte se jako vlastník a udělte oprávnění účtu <aad-username>, který vytvořil konektor služby. Uživatelské jméno z připojovací řetězec nebo konfigurace nastavené konektorem služby by mělo vypadat jako aad_<connection name>. Pokud používáte portál Azure, vyberte tlačítko pro rozbalení vedle sloupce Typ služby a zobrazte hodnotu. Pokud používáte Azure CLI, zkontrolujte ve výstupu příkazu CLI položku configurations.
Potom spuštěním následujícího dotazu udělte oprávnění:
az extension add --name rdbms-connect
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"
<owner-username> a <owner-password> patří vlastníkovi existující tabulky, který může udělovat oprávnění ostatním.
<aad-username> je uživatel vytvořený služebním konektorem. Nahraďte je skutečnými hodnotami.
Ověřte výsledek:
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "SELECT distinct(table_name) FROM information_schema.table_privileges WHERE grantee='<aad-username>' AND table_schema='public';" --output table
Tento příkaz konektoru služby dokončí v pozadí následující úlohy:
- Povolte spravovanou identitu přiřazenou systémem nebo přiřaďte identitu uživatele pro aplikaci
<server-name> hostované Azure App Service.
- Nastavte správce Microsoft Entra na aktuálního přihlášeného uživatele.
- Přidejte uživatele databáze pro spravovanou identitu přiřazenou systémem nebo spravovanou identitu přiřazenou uživatelem. Udělte tomuto uživateli všechna oprávnění databáze
<database-name> . Uživatelské jméno najdete v připojovací řetězec v předchozím výstupu příkazu.
- Nastavte konfigurace s názvem
AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRING nebo AZURE_SQL_CONNECTIONSTRING na prostředek Azure na základě typu databáze.
- V případě služby App Service se konfigurace nastaví v okně Nastavení aplikace .
Pokud při vytváření připojení narazíte na nějaký problém, projděte si nápovědu v části Řešení potíží .
3. Úprava kódu
Nainstalujte závislosti.
dotnet add package Microsoft.Data.SqlClient
Získejte připojovací řetězec Azure SQL Database z proměnné prostředí přidané Service Connector.
using Microsoft.Data.SqlClient;
// AZURE_SQL_CONNECTIONSTRING should be one of the following:
// For system-assigned managed identity:"Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;TrustServerCertificate=True"
// For user-assigned managed identity: "Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;User Id=<client-id-of-user-assigned-identity>;TrustServerCertificate=True"
string connectionString =
Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")!;
using var connection = new SqlConnection(connectionString);
connection.Open();
Další informace najdete v tématu Použití ověřování pomocí spravované identity v služba Active Directory.
Do souboru pom.xml přidejte následující závislosti:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.4.6</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>10.2.0.jre11</version>
</dependency>
Získejte připojovací řetězec Azure SQL Database z proměnné prostředí přidané Service Connector.
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
public class Main {
public static void main(String[] args) {
// AZURE_SQL_CONNECTIONSTRING should be one of the following:
// For system-assigned managed identity: "jdbc:sqlserver://{SQLName}.database.windows.net:1433;databaseName={SQLDbName};authentication=ActiveDirectoryMSI;"
// For user-assigned managed identity: "jdbc:sqlserver://{SQLName}.database.windows.net:1433;databaseName={SQLDbName};msiClientId={UserAssignedMiClientId};authentication=ActiveDirectoryMSI;"
String connectionString = System.getenv("AZURE_SQL_CONNECTIONSTRING");
SQLServerDataSource ds = new SQLServerDataSource();
ds.setURL(connectionString);
try (Connection connection = ds.getConnection()) {
System.out.println("Connected successfully.");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Další informace najdete v tématu Pojení pomocí ověřování Microsoft Entra.
Nainstalujte závislosti.
python -m pip install mssql-python python-dotenv
Získejte konfigurace připojení pro Azure SQL Database z proměnné prostředí, kterou přidal Konektor služby. Odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
import os
from mssql_python import connect
server = os.getenv('AZURE_SQL_SERVER')
port = os.getenv('AZURE_SQL_PORT')
database = os.getenv('AZURE_SQL_DATABASE')
# Uncomment the following lines according to the authentication type.
# For system-assigned managed identity.
# connection_string = f'Server={server},{port};Database={database};Authentication=ActiveDirectoryMSI;Encrypt=yes;'
# For user-assigned managed identity.
# client_id = os.getenv('AZURE_SQL_USER')
# connection_string = f'Server={server},{port};Database={database};UID={client_id};Authentication=ActiveDirectoryMSI;Encrypt=yes;'
conn = connect(connection_string)
Alternativní metodu můžete také připojit k Azure SQL Database pomocí přístupového tokenu, viz Migrace aplikace Python pro použití připojení bez hesla s Azure SQL Database.
- Nainstalujte závislosti.
npm install mssql
- Získejte konfigurace připojení Azure SQL Database z proměnných prostředí přidaných službou Service Connector. Odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
import sql from 'mssql';
const server = process.env.AZURE_SQL_SERVER;
const database = process.env.AZURE_SQL_DATABASE;
const port = parseInt(process.env.AZURE_SQL_PORT);
const authenticationType = process.env.AZURE_SQL_AUTHENTICATIONTYPE;
// Uncomment the following lines according to the authentication type.
// For system-assigned managed identity.
// const config = {
// server,
// port,
// database,
// authentication: {
// authenticationType
// },
// options: {
// encrypt: true
// }
// };
// For user-assigned managed identity.
// const clientId = process.env.AZURE_SQL_CLIENTID;
// const config = {
// server,
// port,
// database,
// authentication: {
// type: authenticationType
// },
// options: {
// encrypt: true,
// clientId: clientId
// }
// };
this.poolconnection = await sql.connect(config);
Další informace najdete v tématu Homepage pro programování klientů pro Microsoft SQL Server.
Další ukázky kódu najdete v tématu Vytvoření připojení bez hesla k databázové službě prostřednictvím konektoru Service Connector.
Připojení k Azure Database for MySQL ve vašem kódu se řídí vzorem DefaultAzureCredential pro všechny jazykové platformy.
DefaultAzureCredential je dostatečně flexibilní, aby se přizpůsobila vývojovému prostředí i Azure prostředí. Při místním spuštění může načíst přihlášeného uživatele Azure z vámi zvoleného prostředí (Visual Studio, Visual Studio Code, Azure CLI nebo Azure PowerShell). Při spuštění v Azure načte spravovanou identitu. Proto je možné mít připojení k databázi v době vývoje i v produkčním prostředí. Vzor je následující:
- Vytvořte instanci
DefaultAzureCredential z klientské knihovny Azure Identity. Pokud používáte identitu přiřazenou uživatelem, zadejte ID klienta identity.
- Získejte přístupový token pro Azure Database for MySQL:
https://ossrdbms-aad.database.windows.net/.default.
- Přidejte token do připojovací řetězec.
- Otevřete připojení.
Pro .NET získejte přístupový token pro spravovanou identitu pomocí klientské knihovny, jako je Azure. Identita Pak se pomocí přístupového tokenu připojte k databázi heslem. Při použití následujícího kódu nezapomeňte odkomentovat část fragmentu kódu, která odpovídá typu ověřování, který chcete použít.
using Azure.Core;
using Azure.Identity;
using MySqlConnector;
// Uncomment the following lines according to the authentication type.
// For system-assigned managed identity.
// var credential = new DefaultAzureCredential();
// For user-assigned managed identity.
// var credential = new DefaultAzureCredential(
// new DefaultAzureCredentialOptions
// {
// ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTID");
// });
var tokenRequestContext = new TokenRequestContext(
new[] { "https://ossrdbms-aad.database.windows.net/.default" });
AccessToken accessToken = await credential.GetTokenAsync(tokenRequestContext);
// Open a connection to the MySQL server using the access token.
string connectionString =
$"{Environment.GetEnvironmentVariable("AZURE_MYSQL_CONNECTIONSTRING")};Password={accessToken.Token}";
using var connection = new MySqlConnection(connectionString);
Console.WriteLine("Opening connection using access token...");
await connection.OpenAsync();
// do something
Do souboru pom.xml přidejte následující závislosti:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.2.0</version>
</dependency>
Získejte připojovací řetězec z proměnné prostředí a přidejte název modulu plug-in pro připojení k databázi:
String url = System.getenv("AZURE_MYSQL_CONNECTIONSTRING");
String pluginName = "com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin";
Connection connection = DriverManager.getConnection(url + "&defaultAuthenticationPlugin=" +
pluginName + "&authenticationPlugins=" + pluginName);
Další informace najdete v tématu Použití Java a JDBC s Azure Database for MySQL – flexibilní server.
Nainstalujte závislosti.
pip install azure-identity
# install Connector/Python https://dev.mysql.com/doc/connector-python/en/connector-python-installation.html
pip install mysql-connector-python
Ověřte se pomocí přístupového tokenu azure-identity z knihovny. Získejte informace o připojení z proměnné prostředí, kterou přidal konektor Service Connector. Při použití následujícího kódu nezapomeňte odkomentovat část fragmentu kódu, která odpovídá typu ověřování, který chcete použít.
from azure.identity import ManagedIdentityCredential, ClientSecretCredential
import mysql.connector
import os
# Uncomment the following lines according to the authentication type.
# For system-assigned managed identity.
# cred = ManagedIdentityCredential()
# For user-assigned managed identity.
# managed_identity_client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# acquire token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# open connect to Azure MySQL with the access token.
host = os.getenv('AZURE_MYSQL_HOST')
database = os.getenv('AZURE_MYSQL_NAME')
user = os.getenv('AZURE_MYSQL_USER')
password = accessToken.token
cnx = mysql.connector.connect(user=user,
password=password,
host=host,
database=database)
cnx.close()
Nainstalujte závislosti.
npm install --save @azure/identity
npm install --save mysql2
Získejte přístupový token pomocí @azure/identity a informací o databázi Azure MySQL z proměnných prostředí přidaných konektorem služby. Při použití následujícího kódu nezapomeňte odkomentovat část fragmentu kódu, která odpovídá typu ověřování, který chcete použít.
import { DefaultAzureCredential,ClientSecretCredential } from "@azure/identity";
const mysql = require('mysql2');
// Uncomment the following lines according to the authentication type.
// for system-assigned managed identity
// const credential = new DefaultAzureCredential();
// for user-assigned managed identity
// const clientId = process.env.AZURE_MYSQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// acquire token
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
const connection = mysql.createConnection({
host: process.env.AZURE_MYSQL_HOST,
user: process.env.AZURE_MYSQL_USER,
password: accessToken.token,
database: process.env.AZURE_MYSQL_DATABASE,
port: process.env.AZURE_MYSQL_PORT,
ssl: process.env.AZURE_MYSQL_SSL
});
connection.connect((err) => {
if (err) {
console.error('Error connecting to MySQL database: ' + err.stack);
return;
}
console.log('Connected to MySQL database');
});
Další ukázky kódu najdete v tématu Vytvoření připojení bez hesla k databázové službě prostřednictvím konektoru Service Connector.
Připojení k Azure Database for PostgreSQL se v kódu řídí vzorem DefaultAzureCredential pro všechny programovací jazyky.
DefaultAzureCredential je dostatečně flexibilní, aby se přizpůsobila vývojovému prostředí i Azure prostředí. Při místním spuštění může načíst přihlášeného uživatele Azure z vámi zvoleného prostředí (Visual Studio, Visual Studio Code, Azure CLI nebo Azure PowerShell). Při spuštění v Azure načte spravovanou identitu. Proto je možné mít připojení k databázi v době vývoje i v produkčním prostředí. Vzor je následující:
- Vytvořte instanci
DefaultAzureCredential z klientské knihovny Azure Identity. Pokud používáte identitu přiřazenou uživatelem, zadejte ID klienta identity.
- Získejte přístupový token pro Azure Database for PostgreSQL:
https://ossrdbms-aad.database.windows.net/.default.
- Přidejte token do připojovací řetězec.
- Otevřete připojení.
Pro .NET získejte přístupový token pro spravovanou identitu pomocí klientské knihovny, jako je Azure. Identita Pak se pomocí přístupového tokenu připojte k databázi heslem. Při použití následujícího kódu nezapomeňte odkomentovat část fragmentu kódu, která odpovídá typu ověřování, který chcete použít.
using Azure.Identity;
using Azure.Core;
using Npgsql;
// Uncomment the following lines according to the authentication type.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();
// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
// new DefaultAzureCredentialOptions
// {
// ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// }
// );
// Acquire the access token.
AccessToken accessToken = await sqlServerTokenProvider.GetTokenAsync(
new TokenRequestContext(scopes: new string[]
{
"https://ossrdbms-aad.database.windows.net/.default"
}));
// Combine the token with the connection string from the environment variables provided by Service Connector.
string connectionString =
$"{Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING")};Password={accessToken.Token}";
// Establish the connection.
using (var connection = new NpgsqlConnection(connectionString))
{
Console.WriteLine("Opening connection using access token...");
connection.Open();
}
Do souboru pom.xml přidejte následující závislosti:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.5</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.2.0</version>
</dependency>
Získejte připojovací řetězec z proměnných prostředí a přidejte název pluginu pro připojení k databázi.
import java.sql.*;
String url = System.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING");
String pluginName = "com.Azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin";
Connection connection = DriverManager.getConnection(url + "&authenticationPluginClassName=" + pluginName);
Další informace naleznete v následujících zdrojích:
Nainstalujte závislosti.
pip install azure-identity
pip install psycopg2-binary
Ověřte se pomocí přístupového tokenu azure-identity z knihovny a použijte token jako heslo. Získejte informace o připojení z proměnných prostředí, které přidal Service Connector. Při použití následujícího kódu nezapomeňte odkomentovat část fragmentu kódu, která odpovídá typu ověřování, který chcete použít.
from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines according to the authentication type.
# For system-assigned identity.
# cred = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# Acquire the access token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
conn_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
conn = psycopg2.connect(conn_string + ' password=' + accessToken.token)
Další informace naleznete v následujících zdrojích:
Nainstalujte závislosti.
npm install --save @azure/identity
npm install --save pg
V kódu získejte přístupový token prostřednictvím @azure/identity a informace o připojení PostgreSQL z proměnných prostředí přidaných službou Service Connector. Zkombinujte je za účelem navázání připojení. Při použití následujícího kódu nezapomeňte odkomentovat část fragmentu kódu, která odpovídá typu ověřování, který chcete použít.
import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
const { Client } = require('pg');
// Uncomment the following lines according to the authentication type.
// For system-assigned identity.
// const credential = new DefaultAzureCredential();
// For user-assigned identity.
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// Acquire the access token.
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
// Use the token and the connection information from the environment variables added by Service Connector to establish the connection.
(async () => {
const client = new Client({
host: process.env.AZURE_POSTGRESQL_HOST,
user: process.env.AZURE_POSTGRESQL_USER,
password: accesstoken.token,
database: process.env.AZURE_POSTGRESQL_DATABASE,
port: Number(process.env.AZURE_POSTGRESQL_PORT) ,
ssl: process.env.AZURE_POSTGRESQL_SSL
});
await client.connect();
await client.end();
})();
Další ukázky kódu najdete v tématu Vytvoření připojení bez hesla k databázové službě prostřednictvím konektoru Service Connector.
4. Nastavení vývojového prostředí
Tento ukázkový kód používá DefaultAzureCredential k získání použitelného tokenu pro vaši databázi Azure z Microsoft Entra ID a pak ho přidá do připojení k databázi. I když můžete přizpůsobit DefaultAzureCredential, je to už ve výchozím nastavení všestranné. Získá token od přihlášeného uživatele Microsoft Entra nebo ze spravované identity v závislosti na tom, jestli ho spouštíte místně ve vývojovém prostředí nebo ve službě App Service.
Bez jakýchkoli dalších změn je váš kód připravený ke spuštění v Azure. K místnímu ladění kódu ale vaše vývojové prostředí potřebuje přihlášeného uživatele Microsoft Entra. V tomto kroku nakonfigurujete své prostředí tak, že se přihlásíte pomocí Microsoft Entra uživatele.
Visual Studio pro Windows je integrovaný s ověřováním Microsoft Entra. Pokud chcete povolit vývoj a ladění ve Visual Studio, přidejte uživatele Microsoft Entra do Visual Studio tak, že v nabídce vyberete File>Nastavení účtu, a vyberte Přihlásit se nebo Přidat.
Pokud chcete nastavit Microsoft Entra uživatele pro ověřování služby Azure, v nabídce vyberte Nástroje>Možnosti, a pak vyberte Azure Ověřování služby>Výběr účtu. Vyberte Microsoft Entra uživatele, který jste přidali, a vyberte OK.
Visual Studio pro Mac není integrované s ověřováním Microsoft Entra. Klientská knihovna Azure Identity, kterou použijete později, ale může také načítat tokeny z Azure CLI. Pokud chcete povolit vývoj a ladění v Visual Studio, instalujte Azure CLI na místním počítači.
Přihlaste se k Azure CLI pomocí následujícího příkazu pomocí uživatele Microsoft Entra:
az login --allow-no-subscriptions
Visual Studio Code je integrovaný s ověřováním Microsoft Entra prostřednictvím rozšíření pro Azure. Nainstalujte rozšíření Azure Tools v Visual Studio Code.
Ve Visual Studio Code na panelu Aktivit vyberte logo Azure.
V průzkumníku App Service vyberte Sign in to Azure... a postupujte podle pokynů.
Klientská knihovna Azure Identity, kterou použijete později, může používat tokeny z Azure CLI. Pokud chcete povolit vývoj založený na příkazovém řádku, instalujte Azure CLI na místním počítači.
Přihlaste se k Azure pomocí následujícího příkazu pomocí uživatele Microsoft Entra:
az login --allow-no-subscriptions
Klientská knihovna Azure Identity, kterou použijete později, může používat tokeny z Azure PowerShell. Pokud chcete povolit vývoj založený na příkazovém řádku, instalujte Azure PowerShell na místním počítači.
Přihlaste se k Azure CLI pomocí následujícího příkazu se svým uživatelem Microsoft Entra:
Connect-AzAccount
Další informace o nastavení vývojového prostředí pro ověřování Microsoft Entra najdete v tématu Azure Klientská knihovna identit pro .NET.
Teď jste připraveni vyvíjet a ladit aplikaci pomocí služby SQL Database jako back-endu pomocí ověřování Microsoft Entra.
5. Testování a publikování
Spusťte kód ve vývojovém prostředí. Váš kód používá přihlášeného Microsoft Entra uživatele ve vašem prostředí k připojení k back-endové databázi. Uživatel má přístup k databázi, protože je nakonfigurovaný jako správce Microsoft Entra databáze.
Publikujte kód do Azure pomocí upřednostňované metody publikování. Ve službě App Service váš kód používá spravovanou identitu aplikace k připojení k back-endové databázi.
Nejčastější dotazy
Podporuje spravovaná identita SQL Server?
Ano. Další informace naleznete v tématu:
Zobrazuje se mi chyba Login failed for user '<token-identified principal>'.
Spravovaná identita, pro kterou se pokoušíte požádat o token, nemá oprávnění pro přístup k Azure databázi.
Provedl(a) jsem změny v autentizaci služby App Service nebo přidružené registraci aplikace. Proč stále dostávám starý token?
Back-endové služby spravovaných identit také udržují mezipaměť tokenů, která aktualizuje token pro cílový prostředek, pouze když vyprší jeho platnost. Pokud konfiguraci upravíte po pokusu o získání tokenu s vaší aplikací, ve skutečnosti nezískáte nový token s aktualizovanými oprávněními, dokud nevyprší platnost tokenu uloženého v mezipaměti. Nejlepší způsob, jak to obejít, je otestovat změny pomocí nového okna InPrivate (Edge)/private (Safari)/Anonymní okno (Chrome). Tímto způsobem určitě začínáte z nové ověřené relace.
Jak přidám spravovanou identitu do skupiny Microsoft Entra?
Pokud chcete, můžete přidat identitu do skupiny Microsoft Entra a pak místo identity udělit přístup ke skupině Microsoft Entra. Například následující příkazy přidají spravovanou identitu z předchozího kroku do nové skupiny myAzureSQLDBAccessGroup:
groupid=$(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
msiobjectid=$(az webapp identity show --resource-group <group-name> --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid
Pokud chcete udělit oprávnění k databázi pro skupinu Microsoft Entra, přečtěte si dokumentaci k příslušnému typu databáze.
Zobrazuje se mi chyba SSL connection is required. Please specify SSL options and retry.
Připojení k databázi Azure vyžaduje další nastavení a přesahuje rozsah tohoto kurzu. Další informace najdete na jednom z následujících odkazů:
Service Connector potřebuje síťový přístup k databázi, aby mohl udělit přístup k identitě aplikace. Když na portálu Azure vytvoříte zabezpečenou architekturu databáze a aplikace ve výchozím nastavení pomocí šablony Web App + Database, architektura uzamkne síťový přístup k databázi a povolí připojení jenom z virtuální sítě. Platí to i pro Azure Cloud Shell. Můžete nasadit Cloud Shell ve virtuální síti a poté v tomto Cloud Shellu spustit příkaz pro Konektor služby.
Další kroky
Naučili jste se:
- Nakonfigurujte Microsoft Entra uživatele jako správce pro vaši databázi Azure.
- Připojte se k databázi jako uživatel Microsoft Entra.
- Nakonfigurujte spravovanou identitu přiřazenou systémem nebo přiřazenou uživatelem pro aplikaci app Service.
- Udělte spravované identitě přístup k databázi.
- Připojte se ke Azure databázi z kódu (.NET Framework 4.8, .NET 6, Node.js, Python, Java) pomocí spravované identity.
- Připojte se k Azure databázi z vývojového prostředí pomocí Microsoft Entra uživatele.