Autenticación y autorización en Azure App Service y Azure Functions
Nota:
A partir del 1 de junio de 2024, todas las aplicaciones de App Service recién creadas tendrán la opción de generar un nombre de host predeterminado único mediante la convención de nomenclatura <app-name>-<random-hash>.<region>.azurewebsites.net
. Los nombres de aplicación existentes permanecerán sin cambios.
Ejemplo: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
Para obtener más información, consulte Nombre de host predeterminado único para el recurso App Service.
Azure App Service incluye funcionalidades de autenticación y autorización integradas (lo que a veces se denomina "Easy Auth") para que pueda proporcionar inicio de sesión a los usuarios y acceder a los datos escribiendo una cantidad mínima de código (o directamente sin código) en la aplicación web, API RESTful y back-end móvil, así como Azure Functions. En este artículo se describe cómo App Service le ayuda a simplificar la autenticación y autorización para la aplicación.
¿Por qué usar la autenticación integrada?
No es necesario usar esta característica para la autenticación y autorización. Puede usar las características de seguridad agrupadas en el marco de trabajo web de su elección o puede escribir sus propias utilidades. Sin embargo, deberá asegurarse de que la solución se mantiene actualizada con las actualizaciones más recientes del explorador, el protocolo y la seguridad.
La implementación de una solución segura para la autenticación (que permite el inicio de sesión de los usuarios) y la autorización (que proporciona acceso a los datos seguros) puede suponer un esfuerzo considerable. Debe asegurarse de seguir los procedimientos recomendados y los estándares del sector, así como mantener la implementación actualizada. La característica de autenticación integrada para App Service y Azure Functions puede ahorrar tiempo y esfuerzo, ya que proporciona autenticación integrada con proveedores de identidades federados, lo que le permite centrarse en el resto de la aplicación.
- Azure App Service le permite integrar numerosas funcionalidades de autenticación en su aplicación web o API sin implementarlas usted mismo.
- Está integrado directamente en la plataforma y no requiere ningún idioma, SDK, experiencia en seguridad ni ningún código en particular.
- Puede integrar con varios proveedores de inicio de sesión. Por ejemplo, Microsoft Entra, Facebook, Google, X.
Es posible que su aplicación deba admitir situaciones más complejas, como la integración de Visual Studio o el consentimiento incremental. Hay varias soluciones de autenticación diferentes disponibles para admitir estos escenarios. Para más información, consulte Escenarios de identidad.
Proveedores de identidades
App Service usa la identidad federada, en la cual un proveedor de identidades de terceros almacena las identidades de usuario y el flujo de autenticación para usted. De forma predeterminada, están disponibles los siguientes proveedores de identidades:
Proveedor | Punto de conexión de inicio de sesión | Guía de procedimientos |
---|---|---|
Microsoft Entra | /.auth/login/aad |
Inicio de sesión de la plataforma Microsoft Entra de App Service |
/.auth/login/facebook |
Inicio de sesión con Facebook para App Service | |
/.auth/login/google |
Inicio de sesión con Google para App Service | |
X | /.auth/login/x |
Inicio de sesión de X de App Service |
GitHub | /.auth/login/github |
Inicio de sesión de GitHub de App Service |
Inicio de sesión con Apple | /.auth/login/apple |
Inicio de sesión de App Service con el inicio de sesión de Apple (versión preliminar) |
Nuevo proveedor de OpenID Connect | /.auth/login/<providerName> |
Inicio de sesión con OpenID Connect para App Service |
Cuando configura esta característica con uno de estos proveedores, su punto de conexión de inicio de sesión está disponible para la autenticación de los usuarios y para la validación de los tokens de autenticación del proveedor. Se puede proporcionar a los usuarios cualquier número de estas opciones de inicio de sesión.
Consideraciones sobre el uso de la autenticación integrada
La habilitación de esta característica hará que todas las solicitudes a la aplicación se redirijan automáticamente a HTTPS, con independencia del valor de configuración de App Service para aplicar HTTPS. Puede deshabilitarlo con la configuración de requireHttps
en la configuración de V2. Sin embargo, recomendamos seguir con HTTPS, y debe asegurarse de que ningún token de seguridad se transmita a través de conexiones HTTP no seguras.
App Service puede usarse para la autenticación con o sin restringir el acceso al contenido del sitio y a las API. Las restricciones de acceso se pueden establecer en la sección Autenticación>Configuración de autenticación de la aplicación web. Para restringir el acceso a la aplicación solo a los usuarios autenticados, establezca Acción necesaria cuando la solicitud no está autenticada para iniciar sesión con uno de los proveedores de identidades configurados. Para autenticar pero no restringir el acceso, establezca Acción necesaria cuando la solicitud no está autenticada en "Permitir solicitudes anónimas (ninguna acción)".
Importante
Debe otorgar al registro de cada aplicación su propio permiso y consentimiento. Evite el uso compartido de permisos entre entornos mediante registros de aplicación independientes para ranuras de implementación independientes. Al probar nuevo código, esta práctica puede ayudar a evitar que los problemas afecten a la aplicación de producción.
Funcionamiento
Arquitectura de características
Comportamiento de la autorización
Arquitectura de características
El componente de middleware de autenticación y autorización es una característica de la plataforma que se ejecuta en la misma máquina virtual que la aplicación. Cuando está habilitado, cada solicitud HTTP entrante pasa por él antes de que la aplicación lo controle.
El middleware de plataforma controla varios aspectos de la aplicación:
- Autentica usuarios y clientes con los proveedores de identidades especificados.
- Valida, almacena y actualiza los tokens de OAuth emitidos por los proveedores de identidades configurados.
- Administra la sesión autenticada
- Inserta información de identidad en encabezados de solicitud HTTP.
El módulo se ejecuta por separado del código de la aplicación y se puede configurar mediante Azure Resource Manager o mediante un archivo de configuración. No se necesitan SDK, lenguajes de programación específicos ni cambios en el código de la aplicación.
Arquitectura de características en Windows (implementación sin contenedor)
El módulo de autenticación y autorización se ejecuta como módulo de IIS nativo en el mismo espacio aislado que la aplicación. Cuando está habilitado, cada solicitud HTTP entrante pasa por él antes de que la aplicación lo controle.
Arquitectura de características en Linux y contenedores
El módulo de autenticación y autorización se ejecuta en un contenedor independiente, aislado del código de la aplicación. Con lo que se conoce como patrón de embajador, interactúa con el tráfico entrante para realizar una funcionalidad similar a la de Windows. Dado que no se ejecuta en proceso, no es posible la integración directa con marcos de lenguaje específicos. Sin embargo, la información pertinente que necesita su aplicación se pasa con encabezados de solicitud, como se explica a continuación.
Flujo de autenticación
El flujo de autenticación es el mismo para todos los proveedores, pero varía en función de si desea iniciar sesión con el SDK del proveedor:
- Sin el SDK del proveedor: la aplicación delega el inicio de sesión federado a App Service. Por lo general, suele ser el caso de las aplicaciones de explorador, que pueden presentar la página de inicio de sesión del proveedor al usuario. El código del servidor administra el proceso de inicio de sesión, por lo que también se denomina flujo dirigido por el servidor o flujo de servidor. Este caso se aplica a aplicaciones de explorador y aplicaciones móviles que usan un explorador incrustado para la autenticación.
- Con el SDK del proveedor: la aplicación inicia manualmente la sesión del usuario con el proveedor y luego envía el token de autenticación a App Service para su validación. Por lo general, suele ser el caso de las aplicaciones sin explorador, que no pueden presentar la página de inicio de sesión del proveedor al usuario. El código de aplicación administra el proceso de inicio de sesión, por lo que también se denomina flujo dirigido por el cliente o flujo de cliente. Este caso se aplica a las API REST, Azure Functions y los clientes de explorador de JavaScript, así como a las aplicaciones de explorador que necesitan más flexibilidad en el proceso de inicio de sesión. También se aplica a las aplicaciones móviles nativas que proporciona inicio de sesión a los usuarios con el SDK del proveedor.
Las llamadas desde una aplicación de explorador de confianza en App Service a otra REST API de App Service o Azure Functions se pueden autenticar mediante el flujo dirigido por el servidor. Para obtener más información, vea Personalización del inicio y cierre de sesión.
En la tabla siguiente se muestran los pasos del flujo de autenticación.
Paso | Sin el SDK del proveedor | Con el SDK del proveedor |
---|---|---|
1. Inicio de sesión del usuario | Redirige el cliente a /.auth/login/<provider> . |
El código de cliente proporciona inicio de sesión al usuario directamente con el SDK del proveedor y recibe un token de autenticación. Para información, consulte la documentación del proveedor. |
2. Autenticación posterior | El proveedor redirige el cliente a /.auth/login/<provider>/callback . |
El código de cliente publica el token del proveedor en /.auth/login/<provider> para la validación. |
3. Establecer la sesión autenticada | App Service agrega una cookie autenticada a la respuesta. | App Service devuelve su propio token de autenticación al código de cliente. |
4. Servir contenido autenticado | El cliente incluye la cookie de autenticación en las solicitudes posteriores (controladas automáticamente por explorador). | El código de cliente presenta el token de autenticación en el encabezado X-ZUMO-AUTH . |
Para los exploradores del cliente, App Service puede dirigir automáticamente todos los usuarios no autenticados a /.auth/login/<provider>
. También se pueden presentar a los usuarios uno o varios vínculos /.auth/login/<provider>
para iniciar sesión en la aplicación con sus proveedores preferidos.
Comportamiento de la autorización
Importante
De manera predeterminada, esta característica solo proporciona autenticación, no autorización. Es posible que la aplicación todavía tenga que tomar decisiones de autorización, además de las comprobaciones que configure aquí.
En Azure Portal, puede configurar App Service con varios comportamientos cuando la solicitud entrante no esté autenticada. Los encabezados siguientes describen las opciones.
Restricción del acceso
Permitir solicitudes no autenticadas Esta opción aplaza la autorización del tráfico no autenticado al código de la aplicación. Para las solicitudes autenticadas, App Service también transfiere información de autenticación en los encabezados HTTP.
Esta opción proporciona más flexibilidad a la hora de controlar las solicitudes anónimas. Por ejemplo, le permite presentar varios proveedores de inicio de sesión a los usuarios. Sin embargo, debe escribir código.
Requerir autenticación Esta opción rechazará todo tráfico no autenticado a la aplicación. La acción a realizar se especifica en la sección Solicitudes no autenticadas.
Con esta opción, no es necesario escribir ningún código de autenticación en la aplicación. Una autorización más precisa, como la autorización específica de rol, se puede controlarse mediante la inspección de las notificaciones del usuario (consulte Access user claims (Acceso a las notificaciones de usuario)).
Precaución
Este método de restricción del acceso se aplica a todas las llamadas a la aplicación, lo que puede no ser deseable para las aplicaciones que necesitan una página de inicio disponible públicamente, como muchas aplicaciones de una sola página.
Nota:
Al usar el proveedor de identidades de Microsoft con los usuarios de su organización, el comportamiento predeterminado es que cualquier usuario del inquilino de Microsoft Entra pueda solicitar un token para la aplicación. Puede configurar la aplicación en Microsoft Entra si quiere restringir el acceso a la aplicación a un conjunto definido de usuarios. App Service también ofrece algunas comprobaciones de autorización integradas básicas que pueden ayudar con algunas validaciones. Para obtener más información sobre la autorización en Microsoft Entra, consulte Conceptos básicos de autorización de Microsoft Entra.
Solicitudes no autenticadas
- Redireccionamiento HTTP 302 Encontrado: recomendado para sitios webRedirige la acción a uno de los proveedores de identidades configurados. En estos casos, un cliente del explorador se redirige a
/.auth/login/<provider>
para el proveedor que elija. - HTTP 401 No autorizado: recomendado para las API Si la solicitud anónima procede de una aplicación móvil nativa, la respuesta devuelta es un
HTTP 401 Unauthorized
. También puede configurar el rechazo para que sea unHTTP 401 Unauthorized
para todas las solicitudes. - HTTP 403 Prohibido Configura el rechazo para que sea un
HTTP 403 Forbidden
para todas las solicitudes. - HTTP 404 No encontrado Configura el rechazo para que sea un
HTTP 404 Not found
para todas las solicitudes.
Almacén de tokens
App Service proporciona un almacén de tokens integrado, que es un repositorio de tokens que están asociados a los usuarios de las aplicaciones web, API o aplicaciones móviles nativas. Al habilitar la autenticación con cualquier proveedor, este almacén de tokens pasa a estar inmediatamente disponible para la aplicación, si el código de aplicación necesita acceder a los datos de estos proveedores en nombre del usuario, como:
- publicar en la escala de tiempo de Facebook del usuario autenticado
- leer los datos corporativos del usuario mediante Microsoft Graph API
Normalmente, debe escribir código para recopilar, almacenar y actualizar estos tokens en la aplicación. Con el almacén de tokens, simplemente recupera los tokens cuando los necesita e indica a App Service que los actualice cuando dejan de ser válidos.
Los tokens de identificador, los tokens de acceso y los tokens de actualización se almacenaron en caché durante la sesión autenticada y solamente el usuario asociado puede acceder a ellos.
Si no necesita trabajar con tokens en la aplicación, puede deshabilitar el almacén de tokens en la página Autenticación/Autorización de la aplicación.
Registro y seguimiento
Si habilita el registro de aplicaciones, verá los seguimientos de autenticación y autorización directamente en los archivos de registro. Si ve un error de autenticación que no esperaba, puede encontrar cómodamente todos los detalles examinando los registros de aplicaciones existentes. Si habilita el seguimiento de solicitudes erróneas, puede ver exactamente qué rol puede haber desempeñado el módulo de autenticación y autorización en una solicitud errónea. En los registros de seguimiento, busque las referencias a un módulo denominado EasyAuthModule_32/64
.
Mitigación de falsificación de solicitudes entre sitios
La autenticación de App Service mitiga CSRF inspeccionando las solicitudes de cliente para las condiciones siguientes:
- Es una solicitud POST que se autentica mediante una cookie de sesión.
- La solicitud procede de un explorador conocido (según lo determinado por el encabezado HTTP
User-Agent
). - Falta el encabezado HTTP
Origin
o HTTPReferer
o no está en la lista configurada de dominios externos aprobados para el redireccionamiento. - Falta el encabezado HTTP
Origin
o no está en la lista configurada de orígenes CORS.
Cuando una solicitud cumple todas estas condiciones, la autenticación de App Service la rechaza automáticamente. Puede solucionar esta lógica de mitigación agregando el dominio externo a la lista de redireccionamiento a Autenticación>Editar configuración de autenticación>Direcciones URL de redirección externas permitidas.
Consideraciones al usar Azure Front Door
Al usar Azure App Service con autenticación detrás de Azure Front Door u otros servidores proxy inversos, es necesario tener en cuenta algunos aspectos adicionales.
Deshabilite el almacenamiento en caché de Front Door para el flujo de trabajo de autenticación.
Use el punto de conexión de Front Door para redireccionamientos.
App Service normalmente no es accesible directamente cuando se expone a través de Azure Front Door. Esto se puede evitar, por ejemplo, al exponer App Service a través de Private Link en Azure Front Door Premium. Para evitar que el flujo de trabajo de autenticación redirija el tráfico de nuevo a App Service directamente, es importante configurar la aplicación para volver a redirigir a
https://<front-door-endpoint>/.auth/login/<provider>/callback
.Asegúrese de que App Service usa el URI de redirección correcto.
En algunas configuraciones, App Service usa el FQDN de App Service como el URI de redireccionamiento en lugar del FQDN de Front Door. Esto provocará un problema cuando el cliente se redirige a App Service en lugar de Front Door. Para cambiarlo, la configuración
forwardProxy
debe establecerse enStandard
para que App Service respete el encabezadoX-Forwarded-Host
establecido por Azure Front Door.Otros servidores proxy inversos, como Azure Application Gateway o productos de terceros, pueden usar encabezados diferentes y necesitan una configuración forwardProxy diferente.
Esta configuración no se puede realizar mediante Azure Portal y debe realizarse a través de
az rest
:Exportar configuración
az rest --uri /subscriptions/REPLACE-ME-SUBSCRIPTIONID/resourceGroups/REPLACE-ME-RESOURCEGROUP/providers/Microsoft.Web/sites/REPLACE-ME-APPNAME/config/authsettingsV2?api-version=2020-09-01 --method get > auth.json
Actualización de la configuración
Buscar
"httpSettings": { "forwardProxy": { "convention": "Standard" } }
y asegúrese de que
convention
está establecido enStandard
para respetar el encabezadoX-Forwarded-Host
usado por Azure Front Door.Importar configuración
az rest --uri /subscriptions/REPLACE-ME-SUBSCRIPTIONID/resourceGroups/REPLACE-ME-RESOURCEGROUP/providers/Microsoft.Web/sites/REPLACE-ME-APPNAME/config/authsettingsV2?api-version=2020-09-01 --method put --body @auth.json
Más recursos
- Configuración de una aplicación de App Service o Azure Functions para usar el inicio de sesión de Microsoft Entra
- Personalización del inicio y cierre de sesión
- Trabajo con tokens de OAuth y sesiones
- Acceso a notificaciones de usuario y aplicación
- Configuración basada en archivos
Ejemplos:
- Tutorial: Incorporación de la autenticación a una aplicación web que se ejecuta en Azure App Service
- Tutorial: Autenticación y autorización de usuarios de un extremo a otro en Azure App Service (Windows)
- Integración de .NET Core de Azure AppService EasyAuth (de terceros)
- Puesta en funcionamiento de la autenticación de Azure App Service con .NET Core (de terceros)