Autenticación y autorización en Azure App ServiceAuthentication and authorization in Azure App Service

Nota

En este momento, AAD V2 (incluido MSAL) no se admite para Azure App Services y Azure Functions.At this time, AAD V2 (including MSAL) is not supported for Azure App Services and Azure Functions. Compruebe si hay actualizaciones.Please check back for updates.

Azure App Service incluye compatibilidad con autenticación y autorización 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.Azure App Service provides built-in authentication and authorization support, so you can sign in users and access data by writing minimal or no code in your web app, RESTful API, and mobile back end, and also 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.This article describes how App Service helps simplify authentication and authorization for your app.

Para proteger la autenticación y la autorización es necesario entender perfectamente la seguridad, incluida la federación, el cifrado, la administración de JSON Web Token (JWT), los tipos de concesión, etc.Secure authentication and authorization require deep understanding of security, including federation, encryption, JSON web tokens (JWT) management, grant types, and so on. App Service proporciona estas utilidades para que pueda dedicar más tiempo y energía a proporcionar un valor empresarial a su cliente.App Service provides these utilities so that you can spend more time and energy on providing business value to your customer.

Nota

No es necesario usar App Service para la autenticación y autorización.You're not required to use App Service for authentication and authorization. Muchos marcos web están incluidos en las características de seguridad y puede usarlos si lo desea.Many web frameworks are bundled with security features, and you can use them if you like. Si necesita más flexibilidad de la que App Service proporciona, también puede escribir sus propias utilidades.If you need more flexibility than App Service provides, you can also write your own utilities.

Para información específica de aplicaciones móviles nativas, consulte Autenticación y autorización en Azure Mobile Apps.For information specific to native mobile apps, see User authentication and authorization for mobile apps with Azure App Service.

Cómo funcionaHow it works

El módulo de autenticación y autorización se ejecuta en el mismo espacio aislado que el código de aplicación.The authentication and authorization module runs in the same sandbox as your application code. Cuando está habilitado, cada solicitud HTTP entrante pasa a través de él antes de que el código de aplicación lo controle.When it's enabled, every incoming HTTP request passes through it before being handled by your application code.

Este módulo controla varios aspectos de la aplicación:This module handles several things for your app:

  • Autentica a los usuarios con el proveedor especificadoAuthenticates users with the specified provider
  • Valida, almacena y actualiza tokensValidates, stores, and refreshes tokens
  • Administra la sesión autenticadaManages the authenticated session
  • Inyecta información de identidad en los encabezados de solicitudInjects identity information into request headers

El módulo se ejecuta por separado del código de aplicación y se configura mediante los parámetros de la aplicación.The module runs separately from your application code and is configured using app settings. No se necesitan SDK, idiomas específicos o cambios en el código de aplicación.No SDKs, specific languages, or changes to your application code are required.

Notificaciones de usuarioUser claims

Para todos los marcos de lenguaje, App Service pone las notificaciones de usuario a disposición del código inyectándolas en los encabezados de solicitud.For all language frameworks, App Service makes the user's claims available to your code by injecting them into the request headers. Para las aplicaciones de ASP.NET 4.6, App Service rellena ClaimsPrincipal.Current con las notificaciones del usuario autenticado, de forma que usted puede seguir el patrón de código de .NET estándar, incluido el atributo [Authorize].For ASP.NET 4.6 apps, App Service populates ClaimsPrincipal.Current with the authenticated user's claims, so you can follow the standard .NET code pattern, including the [Authorize] attribute. De forma similar, para las aplicaciones PHP, App Service rellena la variable _SERVER['REMOTE_USER'].Similarly, for PHP apps, App Service populates the _SERVER['REMOTE_USER'] variable.

Para Azure Functions, ClaimsPrincipal.Current no se hidrata para el código .NET, pero todavía puede encontrar las notificaciones de usuario en los encabezados de solicitud.For Azure Functions, ClaimsPrincipal.Current is not hydrated for .NET code, but you can still find the user claims in the request headers.

Para más información, consulte Access user claims (Acceso a las notificaciones de usuario).For more information, see Access user claims.

Almacén de tokensToken store

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.App Service provides a built-in token store, which is a repository of tokens that are associated with the users of your web apps, APIs, or native mobile apps. Al habilitar la autenticación con cualquier proveedor, este almacén de tokens pasa a estar inmediatamente disponible para la aplicación,When you enable authentication with any provider, this token store is immediately available to your app. si el código de aplicación necesita acceder a los datos de estos proveedores en nombre del usuario, como:If your application code needs to access data from these providers on the user's behalf, such as:

  • publicar en la escala de tiempo de Facebook del usuario autenticadopost to the authenticated user's Facebook timeline
  • leer los datos corporativos del usuario de Graph API de Azure Active Directory o incluso de Microsoft Graphread the user's corporate data from the Azure Active Directory Graph API or even the Microsoft Graph

Normalmente, debe escribir código para recopilar, almacenar y actualizar estos tokens en la aplicación.You typically must write code to collect, store, and refresh these tokens in your application. 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.With the token store, you just retrieve the tokens when you need them and tell App Service to refresh them when they become invalid.

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.The id tokens, access tokens, and refresh tokens cached for the authenticated session, and they're accessible only by the associated user.

Si no necesita trabajar con tokens en la aplicación, puede deshabilitar el almacén de tokens.If you don't need to work with tokens in your app, you can disable the token store.

Registro y seguimientoLogging and tracing

Si habilita el registro de aplicaciones, verá los seguimientos de autenticación y autorización directamente en los archivos de registro.If you enable application logging, you will see authentication and authorization traces directly in your log files. Si ve un error de autenticación que no esperaba, puede encontrar cómodamente todos los detalles examinando los registros de aplicaciones existentes.If you see an authentication error that you didn’t expect, you can conveniently find all the details by looking in your existing application logs. 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.If you enable failed request tracing, you can see exactly what role the authentication and authorization module may have played in a failed request. En los registros de seguimiento, busque las referencias a un módulo denominado EasyAuthModule_32/64.In the trace logs, look for references to a module named EasyAuthModule_32/64.

Proveedores de identidadesIdentity providers

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.App Service uses federated identity, in which a third-party identity provider manages the user identities and authentication flow for you. Existen cinco proveedores de identidades de forma predeterminada:Five identity providers are available by default:

ProveedorProvider Punto de conexión de inicio de sesiónSign-in endpoint
Azure Active DirectoryAzure Active Directory /.auth/login/aad
Cuenta MicrosoftMicrosoft Account /.auth/login/microsoftaccount
FacebookFacebook /.auth/login/facebook
GoogleGoogle /.auth/login/google
TwitterTwitter /.auth/login/twitter

Cuando habilita la autenticación y autorización con uno de estos proveedores, su punto de conexión de inicio de sesión está disponible para la autenticación de usuarios y para la validación de tokens de autenticación del proveedor.When you enable authentication and authorization with one of these providers, its sign-in endpoint is available for user authentication and for validation of authentication tokens from the provider. Se puede proporcionar a los usuarios cualquier número de estas opciones de inicio de sesión con facilidad.You can provide your users with any number of these sign-in options with ease. También puede integrar otro proveedor de identidades o su propia solución de identidad personalizada.You can also integrate another identity provider or your own custom identity solution.

Flujo de autenticaciónAuthentication flow

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:The authentication flow is the same for all providers, but differs depending on whether you want to sign in with the provider's SDK:

  • Sin el SDK del proveedor: la aplicación delega el inicio de sesión federado a App Service.Without provider SDK: The application delegates federated sign-in to 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.This is typically the case with browser apps, which can present the provider's login page to the user. 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.The server code manages the sign-in process, so it is also called server-directed flow or server flow. Este caso se aplica a las aplicaciones de explorador.This case applies to browser apps. También se aplica a las aplicaciones nativas que proporcionan inicio de sesión a los usuarios mediante el SDK de cliente de Mobile Apps porque el SDK abre una vista web para proporcionar inicio de sesión a los usuarios con autenticación de App Service.It also applies to native apps that sign users in using the Mobile Apps client SDK because the SDK opens a web view to sign users in with App Service authentication.
  • 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.With provider SDK: The application signs users in to the provider manually and then submits the authentication token to App Service for validation. 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.This is typically the case with browser-less apps, which can't present the provider's sign-in page to the user. 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.The application code manages the sign-in process, so it is also called client-directed flow or client flow. 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.This case applies to REST APIs, Azure Functions, and JavaScript browser clients, as well as browser apps that need more flexibility in the sign-in process. También se aplica a las aplicaciones móviles nativas que proporciona inicio de sesión a los usuarios con el SDK del proveedor.It also applies to native mobile apps that sign users in using the provider's SDK.

Nota

Las llamadas desde una aplicación de explorador de confianza en App Service y las llamadas a otra REST API en App Service o Azure Functions se pueden autenticar utilizando el flujo dirigido por el servidor.Calls from a trusted browser app in App Service calls another REST API in App Service or Azure Functions can be authenticated using the server-directed flow. Para obtener más información, consulte Personalización de la autenticación y autorización en Azure App Service.For more information, see Customize authentication and authorization in App Service.

En la tabla siguiente se muestran los pasos del flujo de autenticación.The table below shows the steps of the authentication flow.

PasoStep Sin el SDK del proveedorWithout provider SDK Con el SDK del proveedorWith provider SDK
1. Inicio de sesión del usuario1. Sign user in Redirige el cliente a /.auth/login/<provider>.Redirects client to /.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.Client code signs user in directly with provider's SDK and receives an authentication token. Para información, consulte la documentación del proveedor.For information, see the provider's documentation.
2. Autenticación posterior2. Post-authentication El proveedor redirige el cliente a /.auth/login/<provider>/callback.Provider redirects client to /.auth/login/<provider>/callback. El código de cliente publica el token del proveedor en /.auth/login/<provider> para la validación.Client code posts token from provider to /.auth/login/<provider> for validation.
3. Establecer la sesión autenticada3. Establish authenticated session App Service agrega una cookie autenticada a la respuesta.App Service adds authenticated cookie to response. App Service devuelve su propio token de autenticación al código de cliente.App Service returns its own authentication token to client code.
4. Servir contenido autenticado4. Serve authenticated content El cliente incluye la cookie de autenticación en las solicitudes posteriores (controladas automáticamente por explorador).Client includes authentication cookie in subsequent requests (automatically handled by browser). El código de cliente presenta el token de autenticación en el encabezado X-ZUMO-AUTH (controlado automáticamente por SDK de cliente de Mobile Apps).Client code presents authentication token in X-ZUMO-AUTH header (automatically handled by Mobile Apps client SDKs).

Para los exploradores del cliente, App Service puede dirigir automáticamente todos los usuarios no autenticados a /.auth/login/<provider>.For client browsers, App Service can automatically direct all unauthenticated users to /.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.You can also present users with one or more /.auth/login/<provider> links to sign in to your app using their provider of choice.

Comportamiento de la autorizaciónAuthorization behavior

En Azure Portal, puede configurar la autorización de App Service con varios comportamientos.In the Azure portal, you can configure App Service authorization with a number of behaviors.

Los encabezados siguientes describen las opciones.The following headings describe the options.

Permitir todas las solicitudes (opción predeterminada)Allow all requests (default)

App Service no administra la autenticación ni la autorización (desactivadas).Authentication and authorization are not managed by App Service (turned off).

Elija esta opción si no necesita autenticación ni autorización, o si desea escribir su propio código de autenticación y autorización.Choose this option if you don't need authentication and authorization, or if you want to write your own authentication and authorization code.

Permitir solo solicitudes autenticadasAllow only authenticated requests

La opción es Iniciar sesión con <proveedor> .The option is Log in with <provider>. App Service redirige todas las solicitudes anónimas a /.auth/login/<provider> para el proveedor que elija.App Service redirects all anonymous requests to /.auth/login/<provider> for the provider you choose. Si la solicitud anónima procede de una aplicación móvil nativa, la respuesta devuelta es HTTP 401 Unauthorized.If the anonymous request comes from a native mobile app, the returned response is an HTTP 401 Unauthorized.

Con esta opción, no es necesario escribir ningún código de autenticación en la aplicación.With this option, you don't need to write any authentication code in your app. 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)).Finer authorization, such as role-specific authorization, can be handled by inspecting the user's claims (see Access user claims).

Permitir todas las solicitudes, pero validar las autenticadasAllow all requests, but validate authenticated requests

La opción es Permitir solicitudes anónimas .The option is Allow Anonymous requests. Esta opción activa la autenticación y autorización de App Service, pero traslada las decisiones de autorización al código de aplicación.This option turns on authentication and authorization in App Service, but defers authorization decisions to your application code. Para las solicitudes autenticadas, App Service también transfiere información de autenticación en los encabezados HTTP.For authenticated requests, App Service also passes along authentication information in the HTTP headers.

Esta opción proporciona más flexibilidad a la hora de controlar las solicitudes anónimas.This option provides more flexibility in handling anonymous requests. Por ejemplo, le permite presentar varios proveedores de inicio de sesión a los usuarios.For example, it lets you present multiple sign-in providers to your users. Sin embargo, debe escribir código.However, you must write code.

Más recursosMore resources

Tutorial: Autenticación y autorización de usuarios de un extremo a otro en Azure App Service (Windows)Tutorial: Authenticate and authorize users end-to-end in Azure App Service (Windows)
Tutorial: Autenticación y autorización de usuarios de un extremo a otro en Azure App Service para LinuxTutorial: Authenticate and authorize users end-to-end in Azure App Service for Linux
Customize authentication and authorization in App Service (Personalización de la autenticación y autorización en App Service)Customize authentication and authorization in App Service

Guías de procedimientos específicas del proveedor:Provider-specific how-to guides: