Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial se muestra cómo conectar una aplicación de Azure App Service a una base de datos de Azure SQL back-end suplantando al usuario que ha iniciado sesión, también denominado flujo en nombre de . Para configurar este flujo, habilite la autenticación integrada de App Service mediante el proveedor de identidades de Microsoft Entra.
Este método de conectividad es más avanzado que el enfoque de identidad administrada en Tutorial: Acceso a datos con identidad administrada y tiene las siguientes ventajas en escenarios empresariales:
- Elimina los secretos de conexión a los servicios back-end, al igual que el enfoque de identidad administrada.
- Proporciona a la base de datos back-end u otros servicios de Azure más control sobre la cantidad de acceso que se concede a quién.
- Permite que la aplicación adapte su presentación de datos al usuario que ha iniciado sesión.
En este tutorial, agregará la autenticación de Microsoft Entra a una aplicación web de .NET que tenga un back-end de Azure SQL Database. Aprenderá a:
- Habilite la autenticación de Microsoft Entra para Azure SQL Database.
- Deshabilite otras opciones de autenticación de SQL Database.
- Agregue Microsoft Entra ID como proveedor de identidades para la aplicación.
- Configure el permiso de suplantación de usuario de SQL Database.
- Configure App Service para proporcionar un token de acceso utilizable para SQL Database.
- Acceda a la base de datos de Azure SQL en nombre del usuario de Microsoft Entra que ha iniciado sesión.
Cuando complete el tutorial, la aplicación se conecta de forma segura a SQL Database en nombre del usuario que ha iniciado sesión.
Nota
- Microsoft Entra ID no es compatible con SQL Server local.
- La autenticación de Microsoft Entra es diferente de la autenticación integrada de Windows en Active Directory (AD) Domain Services (DS) local. AD DS y Microsoft Entra ID usan protocolos de autenticación completamente diferentes. Para obtener más información, consulte Documentación de Microsoft Entra Domain Services .
Requisitos previos
Tener acceso a un inquilino de Microsoft Entra rellenado con usuarios y grupos.
Complete el tutorial en Tutorial: Compilación de una aplicación de ASP.NET Core y SQL Database en Azure App Service y use la aplicación completada para este tutorial.
Como alternativa, adapte los pasos y use su propia aplicación .NET con SQL Database. Los pasos de este tutorial admiten las siguientes versiones de .NET:
- .NET Framework 4.8 y versiones posteriores
- .NET 6.0 y versiones posteriores
Inicie sesión en Azure Cloud Shell o prepare su entorno para usar la CLI de Azure.
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Introducción a Azure Cloud Shell.
Si prefieres ejecutar comandos de referencia CLI localmente, instala la CLI de Azure. Si estás utilizando Windows o macOS, considera ejecutar Azure CLI en un contenedor Docker. Para obtener más información, consulte Cómo ejecutar el Azure CLI en un contenedor de Docker.
Si estás utilizando una instalación local, inicia sesión en Azure CLI utilizando el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Autenticación en Azure mediante la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para obtener más información sobre las extensiones, consulte Uso y administración de extensiones con la CLI de Azure.
Ejecute az version para ver la versión y las bibliotecas dependientes que están instaladas. Para actualizar a la versión más reciente, ejecute az upgrade.
1. Configuración del servidor de bases de datos con la autenticación de Microsoft Entra
Habilite la autenticación de Microsoft Entra en la base de datos de Azure SQL mediante la asignación de un usuario de Microsoft Entra como administrador de Azure SQL Server. El administrador de Microsoft Entra debe ser un usuario que se cree, importe, sincronice o invite a Microsoft Entra ID. Es posible que el usuario de Microsoft Entra no sea el mismo que el usuario de la cuenta Microsoft para la suscripción de Azure.
Para agregar el usuario microsoft Entra ID como administrador del servidor de Azure SQL Server, ejecute los siguientes comandos de la CLI de Azure.
Use
az ad user listcon eldisplay-nameparámetro ,filteroupnpara obtener el identificador de objeto para el usuario de Id. de Entra de Microsoft que desea realizar el administrador. Por ejemplo, el siguiente comando muestra información de un usuario de Id. de Microsoft Entra con eldisplay-namenombre Apellido.az ad user list --display-name "Firstname Lastname"Copie el
idvalor de la salida que se va a usar en el paso siguiente.Sugerencia
Puede ejecutar
az ad user listindependiente para mostrar información de todos los usuarios en el directorio Microsoft Entra.Agregue el usuario microsoft Entra ID como administrador en azure SQL Server mediante
az sql server ad-admin createelobject-idparámetro . En el comando siguiente, reemplace por<group-name>el nombre del grupo de recursos del servidor,<server-name>por el nombre del servidor menos el.database.windows.netsufijo y<entra-id>por laidsalida del comando anterioraz ad user list.az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id <entra-id>Restrinja la autenticación del servidor de bases de datos solo a la autenticación de Microsoft Entra. Este paso deshabilita la autenticación de nombre de usuario y contraseña de SQL.
az sql server ad-only-auth enable --resource-group <group-name> --name <server-name>
- Para obtener más información sobre cómo crear un usuario de Microsoft Entra, vea Agregar o eliminar usuarios mediante el identificador de Microsoft Entra.
- Para obtener más información sobre los usuarios permitidos de Microsoft Entra para SQL Database, consulte Características y limitaciones de Microsoft Entra en SQL Database.
- Para obtener más información sobre cómo agregar un administrador de Azure SQL Server, consulte Aprovisionamiento de un administrador de Microsoft Entra para el servidor.
2. Habilitación de la autenticación de Id. de Microsoft Entra para la aplicación
Agregue Microsoft Entra ID como proveedor de identidades para la aplicación. Para más información, consulte Configuración de la autenticación de Microsoft Entra para la aplicación de App Services.
En la página de Azure Portal de la aplicación, seleccione Autenticación en Configuración en el menú de navegación izquierdo.
En la página Autenticación , seleccione Agregar proveedor de identidades o seleccione Agregar proveedor en la sección Proveedor de identidades .
En la página Agregar un proveedor de identidades , seleccione Microsoft como proveedor.
En Expiración del secreto de cliente, seleccione una de las opciones de lista desplegable, como Recomendado: 180 días.
Mantenga toda la configuración predeterminada y seleccione Agregar.
Nota
Si vuelve a configurar la configuración de autenticación de la aplicación, es posible que los tokens del almacén de tokens no se vuelvan a generar a partir de la nueva configuración. Para asegurarse de que los tokens se vuelven a generar, cierre la sesión y vuelva a iniciar sesión en la aplicación. Un método sencillo es usar el explorador en modo privado. Cierre y vuelva a abrir el explorador en modo privado después de cambiar la configuración de las aplicaciones.
3. Configuración de la suplantación de usuario de SQL Database
Conceda permisos a la aplicación para acceder a SQL Database en nombre del usuario de Microsoft Entra que ha iniciado sesión.
En la página Autenticación de la aplicación, seleccione el nombre de la aplicación en Proveedor de identidades.
Se abre la página de registro de la aplicación. Este registro se generó automáticamente al agregar el proveedor de Microsoft Entra.
Seleccione Permisos de API en Administrar en el menú de navegación izquierdo.
En la página Permisos de API , seleccione Agregar un permiso.
En la pantalla Solicitar permisos de API , seleccione la pestaña API que usa mi organización .
Escriba Azure SQL Database en el cuadro de búsqueda y seleccione el resultado.
En ¿Qué tipo de permisos requiere la aplicación?, seleccione Permisos delegados, active la casilla situada junto a user_impersonation y, a continuación, seleccione Agregar permisos.
El registro de la aplicación en Microsoft Entra ahora tiene los permisos necesarios para conectarse a SQL Database suplantando al usuario que ha iniciado sesión.
4. Configuración de App Service para devolver un token de acceso que se pueda usar
Para configurar la aplicación para proporcionar un token de acceso utilizable para SQL Database, agregue https://database.windows.net/user_impersonation como scope al proveedor loginParametersde Microsoft Entra de la aplicación. El siguiente comando agrega la loginParameters propiedad con ámbitos personalizados a la configuración del proveedor login de identidades de Microsoft Entra.
De los ámbitos solicitados, App Service ya solicita openidámbitos , profiley email de forma predeterminada. El offline_access ámbito se incluye para que pueda actualizar tokens. Para obtener más información, consulte Ámbitos de OpenID Connect.
El https://database.windows.net/user_impersonation ámbito hace referencia a Azure SQL Database y proporciona un token web JSON (JWT) que especifica SQL Database como destinatario del token. Este comando usa jq para el procesamiento JSON, que ya está instalado en Cloud Shell.
authSettings=$(az webapp auth show --resource-group <group-name> --name <app-name>)
authSettings=$(echo "$authSettings" | jq '.properties' | jq '.identityProviders.azureActiveDirectory.login += {"loginParameters":["scope=openid profile email offline_access https://database.windows.net/user_impersonation"]}')
az webapp auth set --resource-group <group-name> --name <app-name> --body "$authSettings"
Sugerencia
Para configurar el ámbito necesario mediante una interfaz web en lugar de la CLI de Azure, use Configurar el proveedor de Microsoft Entra para proporcionar tokens de actualización, agregando https://database.windows.net/user_impersonation a los ámbitos solicitados.
La aplicación ahora está configurada para generar un token de acceso que SQL Database acepta.
Nota
Los tokens de acceso expiran después de algún tiempo. Para obtener información sobre cómo actualizar los tokens de acceso sin necesidad de que los usuarios vuelvan a autenticarse con la aplicación, consulte Actualizar tokens de autenticación.
5. Uso del token de acceso en el código de la aplicación
Actualice el código de la aplicación para agregar el token de acceso proporcionado por la autenticación de App Service al objeto de conexión.
Nota
Este código no funciona localmente. Para obtener más información y alternativas para la depuración local, consulte Depurar localmente al usar la autenticación de App Service.
En el
DbContextobjeto de DatabaseContext.cs u otro archivo que configure el contexto de la base de datos, cambie el constructor predeterminado para agregar el token de acceso de Id. de Microsoft Entra al objeto de conexión.public MyDatabaseContext (DbContextOptions<MyDatabaseContext> options, IHttpContextAccessor accessor) : base(options) { var conn = Database.GetDbConnection() as SqlConnection; conn.AccessToken = accessor.HttpContext.Request.Headers["X-MS-TOKEN-AAD-ACCESS-TOKEN"]; }Si tiene una cadena de conexión llamada
defaultConnectionen App Service que usa la autenticación de SQL con un nombre de usuario y una contraseña, use el siguiente comando para quitar los secretos de conexión. Reemplace<group-name>,<app-name>,<db-server-name>y por<db-name>los valores.az webapp config connection-string set --resource-group <group-name> --name <app-name> --connection-string-type SQLAzure --settings defaultConnection="server=tcp:<db-server-name>.database.windows.net;database=<db-name>;"
6. Publicación de los cambios
Si ha usado Visual Studio Code en el explorador para realizar cambios de código en la bifurcación de GitHub, seleccione Control de código fuente en el menú izquierdo. Escriba un mensaje de confirmación como OBO connect y seleccione Confirmar.
La confirmación desencadena una implementación de Acciones de GitHub en App Service. Espere unos minutos a que finalice la implementación.
También puede publicar los cambios en Git Bash mediante los siguientes comandos:
git commit -am "configure managed identity"
git push azure main
Si el código está en Visual Studio:
Haga clic con el botón derecho en el proyecto en el Explorador de soluciones y seleccione Publicar.
En la página Publicar , seleccione Publicar.
Cuando la nueva página de la aplicación muestra la aplicación, la aplicación se conecta a la base de datos de Azure SQL en nombre del usuario de Microsoft Entra que ha iniciado sesión. Deberías poder usar y editar la aplicación como de costumbre.
7. Limpieza de recursos
En los pasos anteriores, creó recursos de Azure en un grupo de recursos. Cuando ya no necesite estos recursos, elimine el grupo de recursos mediante la ejecución del comando siguiente:
az group delete --name <group-name>
Este comando puede tardar algún tiempo en ejecutarse.
Preguntas más frecuentes
- ¿Por qué obtengo un error de inicio de sesión para el usuario "<entidad de> seguridad identificada por token"?
- ¿Cómo agregar otros usuarios o grupos de Microsoft Entra en Azure SQL Database?
- ¿Cómo depurar localmente al usar la autenticación de App Service?
- ¿Qué ocurre cuando expiran los tokens de acceso?
¿Por qué obtengo un error de inicio de sesión para el usuario "<entidad de> seguridad identificada por token"?
Las causas más comunes de un Login failed for user '<token-identified principal>' error son:
- Autenticación de Microsoft Entra no configurada para la base de datos de Azure SQL. Consulte Configuración del servidor de bases de datos con la autenticación de Microsoft Entra.
- Ningún token válido en el encabezado de
X-MS-TOKEN-AAD-ACCESS-TOKENsolicitud. Este código no funciona en entornos locales. Para obtener más información y alternativas, consulte Depurar localmente al usar la autenticación de App Service. - El usuario no tiene permiso para conectarse a la base de datos. Para agregar usuarios y permisos, consulte Incorporación de otros usuarios o grupos de Microsoft Entra en Azure SQL Database.
¿Cómo agregar otros usuarios o grupos de Microsoft Entra en Azure SQL Database?
Para agregar más usuarios o grupos, conéctese al servidor de bases de datos mediante sqlcmd o SQL Server Management Studio (SSMS) y cree usuarios de base de datos independientes asignados a identidades de Microsoft Entra.
En el ejemplo siguiente Transact-SQL se agrega una identidad de Microsoft Entra a SQL Server y se proporcionan a la identidad algunos roles de base de datos:
CREATE USER [<user-or-group-name>] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [<user-or-group-name>];
ALTER ROLE db_datawriter ADD MEMBER [<user-or-group-name>];
ALTER ROLE db_ddladmin ADD MEMBER [<user-or-group-name>];
GO
¿Cómo depurar localmente al usar la autenticación de App Service?
Dado que la autenticación de App Service es una característica de Azure, el código de este tutorial no funciona en el entorno local. A diferencia de una aplicación que se ejecuta en Azure, el código local no se beneficia del middleware de autenticación de App Service. Puede usar las siguientes alternativas para la depuración local:
- Conéctese a SQL Database desde el entorno local con
Active Directory Interactiveautenticación. Este flujo de autenticación no inicia sesión en el propio usuario, pero se conecta a la base de datos back-end con el usuario que ha iniciado sesión para poder probar la autorización de la base de datos localmente. - Copie manualmente el token de acceso en el código en lugar del
X-MS-TOKEN-AAD-ACCESS-TOKENencabezado de solicitud. - Si implementa desde Visual Studio, use la depuración remota de la aplicación de App Service.
¿Qué ocurre cuando expiran los tokens de acceso?
El token de acceso expira después de un tiempo. Para obtener información sobre cómo actualizar los tokens de acceso sin requerir que los usuarios vuelvan a autenticarse con la aplicación, consulte Refresh identity provider tokens (Actualización de tokens del proveedor de identidades).
Contenido relacionado
- Tutorial: Conexión a bases de datos de Azure desde App Service sin secretos mediante una identidad administrada
- Tutorial: Acceso a Microsoft Graph desde una aplicación .NET protegida como aplicación
- Tutorial: Aislar la comunicación de back-end con integración de Virtual Network
- Asignación de un nombre DNS personalizado existente a Azure App Service