Compartir a través de


Tutorial: Conexión de una aplicación de App Service a SQL Database en nombre del usuario que ha iniciado sesión

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.

Diagrama de arquitectura para el escenario del tutorial.

Nota

Requisitos previos

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.

  1. Use az ad user list con el display-nameparámetro , filtero upn para 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 el display-name nombre Apellido.

    az ad user list --display-name "Firstname Lastname"
    

    Copie el id valor de la salida que se va a usar en el paso siguiente.

    Sugerencia

    Puede ejecutar az ad user list independiente para mostrar información de todos los usuarios en el directorio Microsoft Entra.

  2. Agregue el usuario microsoft Entra ID como administrador en azure SQL Server mediante az sql server ad-admin create el object-id pará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.net sufijo y <entra-id> por la id salida del comando anterior az ad user list .

    az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id <entra-id>
    
  3. 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>
    

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.

  1. En la página de Azure Portal de la aplicación, seleccione Autenticación en Configuración en el menú de navegación izquierdo.

  2. En la página Autenticación , seleccione Agregar proveedor de identidades o seleccione Agregar proveedor en la sección Proveedor de identidades .

  3. En la página Agregar un proveedor de identidades , seleccione Microsoft como proveedor.

  4. En Expiración del secreto de cliente, seleccione una de las opciones de lista desplegable, como Recomendado: 180 días.

  5. Mantenga toda la configuración predeterminada y seleccione Agregar.

    Captura de pantalla que muestra la página para agregar un proveedor de identidades.

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.

  1. 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.

  2. Seleccione Permisos de API en Administrar en el menú de navegación izquierdo.

  3. En la página Permisos de API , seleccione Agregar un permiso.

  4. En la pantalla Solicitar permisos de API , seleccione la pestaña API que usa mi organización .

  5. Escriba Azure SQL Database en el cuadro de búsqueda y seleccione el resultado.

  6. 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.

    Captura de pantalla de la página Solicitar permisos de API en la que se muestran permisos delegados, user_impersonation y el botón Agregar permiso seleccionado.

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.

  1. En el DbContext objeto 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"];
    }
    
  2. Si tiene una cadena de conexión llamada defaultConnection en 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:

  1. Haga clic con el botón derecho en el proyecto en el Explorador de soluciones y seleccione Publicar.

    Captura de pantalla que muestra cómo publicar desde el Explorador de soluciones en Visual Studio.

  2. 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.

Captura de pantalla que muestra la aplicación web después de publicarla.

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"?

Las causas más comunes de un Login failed for user '<token-identified principal>' error son:

¿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 Interactive autenticació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-TOKEN encabezado 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).