Tipos de aplicaciones para la Plataforma de identidad de MicrosoftApplication types for the Microsoft identity platform

La Plataforma de identidad de Microsoft admite la autenticación de diversas arquitecturas de aplicaciones modernas, todas ellas basadas en los protocolos estándar del sector OAuth 2.0 u OpenID Connect.The Microsoft identity platform supports authentication for a variety of modern app architectures, all of them based on industry-standard protocols OAuth 2.0 or OpenID Connect. En este artículo se describen los tipos de aplicaciones que puede compilar mediante la Plataforma de identidad de Microsoft, independientemente de su plataforma o idioma preferidos.This article describes the types of apps that you can build by using Microsoft identity platform, regardless of your preferred language or platform. La información está diseñada para ayudarlo a entender los escenarios de alto nivel antes de empezar a trabajar con el código en los escenarios de las aplicaciones.The information is designed to help you understand high-level scenarios before you start working with the code in the application scenarios.

Conceptos básicosThe basics

Debe registrar cada aplicación que usa la Plataforma de identidad de Microsoft en Registros de aplicaciones de Azure Portal.You must register each app that uses the Microsoft identity platform in the Azure portal App registrations. El proceso de registro de la aplicación recopila y asigna algunos valores a la aplicación:The app registration process collects and assigns these values for your app:

  • Un identificador de la aplicación (cliente) que identifica la aplicación de manera única.An Application (client) ID that uniquely identifies your app
  • Un URI de redirección que puede usarse para dirigir las respuestas de nuevo a la aplicaciónA Redirect URI that you can use to direct responses back to your app
  • Algunos otros valores específicos para el escenario, como los tipos de cuentas compatibles.A few other scenario-specific values such as supported account types

Para más información, aprenda a registrar una aplicación.For details, learn how to register an app.

Una vez que la aplicación se registra, se comunica con la Plataforma de identidad de Microsoft mediante el envío de solicitudes al punto de conexión.After the app is registered, the app communicates with the Microsoft identity platform by sending requests to the endpoint. Proporcionamos bibliotecas y marcos de código abierto que controlan los detalles de estas solicitudes.We provide open-source frameworks and libraries that handle the details of these requests. También tiene la opción de implementar la lógica de autenticación por su cuenta mediante la creación de solicitudes a estos puntos de conexión:You also have the option to implement the authentication logic yourself by creating requests to these endpoints:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize
https://login.microsoftonline.com/common/oauth2/v2.0/token

Aplicaciones de una página (JavaScript)Single-page apps (JavaScript)

Muchas aplicaciones modernas tienen un front-end de aplicación de página única escrito principalmente en JavaScript, a menudo con un marco como Angular, React o Vue.Many modern apps have a single-page app front end written primarily in JavaScript, often with a framework like Angular, React, or Vue. La Plataforma de identidad de Microsoft es compatible con estas aplicaciones mediante el protocolo OpenID Connect para la autenticación y flujo de concesión implícita de OAuth 2.0 o flujo de código de autorización de OAuth 2.0 más PKCE, el más reciente, para la autorización (consulte a continuación).The Microsoft identity platform supports these apps by using the OpenID Connect protocol for authentication and either OAuth 2.0 implicit grant flow or the more recent OAuth 2.0 authorization code + PKCE flow for authorization (see below).

En el diagrama de flujo siguiente se muestra la concesión de código de autorización de OAuth 2.0 (con los detalles sobre PKCE omitidos), donde la aplicación recibe un código del punto de conexión authorize de la plataforma de identidad de Microsoft y lo canjea por tokens y tokens de actualización mediante solicitudes web entre sitios.The flow diagram below demonstrates the OAuth 2.0 authorization code grant (with details around PKCE omitted), where the app receives a code from the Microsoft identity platform authorize endpoint, and redeems it for tokens and refresh tokens using cross-site web requests. El token de actualización expira cada 24 horas, y la aplicación debe solicitar otro código.The refresh token expires every 24 hours, and the app must request another code. Además del token de acceso, normalmente también se solicita un valor de id_token que representa el usuario que ha iniciado sesión en la aplicación cliente a través del mismo flujo o de una solicitud OpenID Connect independiente (no se muestra aquí).In addition to the access token, an id_token that represents the signed-in user to the client application is typically also requested through the same flow and/or a separate OpenID Connect request (not shown here).

Diagrama que muestra el flujo del código de autorización de OAuth 2 entre una aplicación de una página y el punto de conexión del servicio de token de seguridad.

Para ver este escenario en acción, consulte nuestro Tutorial: Inicio de sesión de usuarios y llamada a Microsoft Graph API desde una aplicación de página única (SPA) de JavaScript mediante un flujo de código de autorización.To see this scenario in action, check out the Tutorial: Sign in users and call the Microsoft Graph API from a JavaScript SPA using auth code flow.

Flujo de código de autorización frente a flujo implícitoAuthorization code flow vs. implicit flow

Durante la mayor parte de la historia de OAuth 2.0, el flujo implícito ha sido la manera recomendada de compilar aplicaciones de página única.For most of the history of OAuth 2.0, the implicit flow was the recommended way to build single-page apps. Con la eliminación de las cookies de terceros y la mayor atención a los problemas de seguridad relacionados con el flujo implícito, hemos pasado al flujo de código de autorización para aplicaciones de página única.With the removal of third-party cookies and greater attention paid to security concerns around the implicit flow, we've moved to the authorization code flow for single-page apps.

Para garantizar la compatibilidad de la aplicación en Safari y otros exploradores que tienen en cuenta la privacidad, ya no se recomienda utilizar el flujo implícito y, en su lugar, se recomienda el flujo de código de autorización.To ensure compatibility of your app in Safari and other privacy-conscious browsers, we no longer recommend use of the implicit flow and instead recommend the authorization code flow.

Aplicaciones webWeb apps

En las aplicaciones web (. NET, PHP, Java, Ruby, Python, Node) a las que el usuario accede a través de un explorador, puede usar OpenID Connect para el inicio de sesión de usuario.For web apps (.NET, PHP, Java, Ruby, Python, Node) that the user accesses through a browser, you can use OpenID Connect for user sign-in. En OpenID Connect, la aplicación web recibe un identificador de token.In OpenID Connect, the web app receives an ID token. Un token de id. es un token de seguridad que comprueba la identidad del usuario y proporciona información sobre el usuario en forma de notificaciones:An ID token is a security token that verifies the user's identity and provides information about the user in the form of claims:

// Partial raw ID token
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImtyaU1QZG1Cd...

// Partial content of a decoded ID token
{
    "name": "John Smith",
    "email": "john.smith@gmail.com",
    "oid": "d9674823-dffc-4e3f-a6eb-62fe4bd48a58"
    ...
}

Hay más detalles sobre los diferentes tipos de token que se usan en la Plataforma de identidad de Microsoft en la referencia Token de acceso y en la referencia id_token.Further details of different types of tokens used in the Microsoft identity platform are available in the access token reference and id_token reference

En las aplicaciones de servidor web, el flujo de autenticación de inicio de sesión realiza estos pasos de alto nivel:In web server apps, the sign-in authentication flow takes these high-level steps:

Muestra el flujo de autenticación de aplicaciones web

Puede confirmar la identidad del usuario mediante la validación del token de id. con una clave de firma pública recibida por la Plataforma de identidad de Microsoft.You can ensure the user's identity by validating the ID token with a public signing key that is received from the Microsoft identity platform. Se establece una cookie de sesión, que puede usarse para identificar al usuario en las sucesivas solicitudes de página.A session cookie is set, which can be used to identify the user on subsequent page requests.

Para ver este escenario en acción, pruebe los ejemplos de código del escenario de la aplicación web que inicia la sesión de los usuarios.To see this scenario in action, try the code samples in the Web app that signs in users scenario.

Además del inicio de sesión sencillo, una aplicación web de servidor podría tener la necesidad de acceder a otros servivio web, como una API de REST.In addition to simple sign-in, a web server app might need to access another web service, such as a REST API. En este caso, la aplicación de servidor web participa en un flujo combinado de OpenID Connect y OAuth 2.0, mediante el flujo de código de autorización de OAuth 2.0.In this case, the web server app engages in a combined OpenID Connect and OAuth 2.0 flow, by using the OAuth 2.0 authorization code flow. Para más información sobre este escenario, lea acerca de cómo comenzar con aplicaciones web y API web.For more information about this scenario, read about getting started with web apps and Web APIs.

API webWeb APIs

Puede usar la Plataforma de identidad de Microsoft para proteger los servicios web, como la API web RESTful de la aplicación.You can use the Microsoft identity platform to secure web services, such as your app's RESTful web API. Las API web se pueden implementar en numerosas plataformas y lenguajes.Web APIs can be implemented in numerous platforms and languages. También se pueden implementar mediante desencadenadores HTTP en Azure Functions.They can also be implemented using HTTP Triggers in Azure Functions. En lugar de tokens de identificador y cookies de sesión, una API web usa un token de acceso de OAuth 2.0 para proteger sus datos y para autenticar las solicitudes entrantes.Instead of ID tokens and session cookies, a web API uses an OAuth 2.0 access token to secure its data and to authenticate incoming requests. El autor de la llamada de una API web anexa un token de acceso en el encabezado de autorización de una solicitud HTTP, como esta:The caller of a web API appends an access token in the authorization header of an HTTP request, like this:

GET /api/items HTTP/1.1
Host: www.mywebapi.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6...
Accept: application/json
...

La API web usa el token de acceso para comprobar la identidad del autor de la llamada de API y extraer información sobre este de las notificaciones que se codifican en dicho token.The web API uses the access token to verify the API caller's identity and to extract information about the caller from claims that are encoded in the access token. Hay más detalles sobre los diferentes tipos de token que se usan en la Plataforma de identidad de Microsoft en la referencia Token de acceso y en la referencia id_token.Further details of different types of tokens used in the Microsoft identity platform are available in the access token reference and id_token reference.

Una API web puede ofrecer a los usuarios la capacidad para administrar la participación o no participación en ciertas funcionalidades o datos mediante la exposición de permisos, conocidos también como ámbitos.A web API can give users the power to opt in or opt out of specific functionality or data by exposing permissions, also known as scopes. Para que una aplicación de llamada adquiera permiso para un ámbito, el usuario debe consentir el ámbito durante un flujo.For a calling app to acquire permission to a scope, the user must consent to the scope during a flow. La Plataforma de identidad de Microsoft solicita al usuario permiso y luego registra los permisos en todos los tokens de acceso que recibe la API web.The Microsoft identity platform asks the user for permission, and then records permissions in all access tokens that the web API receives. La API web valida los tokens de acceso que recibe en cada llamada y realiza comprobaciones de autorización.The web API validates the access tokens it receives on each call and performs authorization checks.

Una API web puede recibir tokens de acceso de todos los tipos de aplicaciones, incluidas las aplicaciones de servidor web, aplicaciones móviles y de escritorio, aplicaciones de página única, demonios del lado servidor e incluso otras API web.A web API can receive access tokens from all types of apps, including web server apps, desktop and mobile apps, single-page apps, server-side daemons, and even other web APIs. El flujo general de una API web se parece a este:The high-level flow for a web API looks like this:

Muestra el flujo de autenticación de API web

Para aprender a proteger una API web con tokens de acceso de OAuth2, consulte los ejemplos de código de API web del escenario de API web protegida.To learn how to secure a web API by using OAuth2 access tokens, check out the web API code samples in the protected web API scenario.

En muchos casos, las API web también tienen que realizar solicitudes salientes a otras API web de bajada protegidas por la Plataforma de identidad de Microsoft.In many cases, web APIs also need to make outbound requests to other downstream web APIs secured by Microsoft identity platform. Para ello, las API web pueden aprovechar las ventajas del flujo con derechos delegados, que permite a la API web intercambiar un token de acceso entrante por otro token de acceso que se usará en las solicitudes salientes.To do so, web APIs can take advantage of the On-Behalf-Of flow, which allows the web API to exchange an incoming access token for another access token to be used in outbound requests. Para más información, consulte Plataforma de identidad de Microsoft y flujo con derechos delegados de OAuth 2.0.For more info, see the Microsoft identity platform and OAuth 2.0 On-Behalf-Of flow.

Aplicaciones móviles y nativasMobile and native apps

Las aplicaciones instaladas en un dispositivo, como las aplicaciones móviles y de escritorio, suelen necesitar el acceso a servicios back-end o a las API web que almacenan datos y realizan funciones en nombre del usuario.Device-installed apps, such as mobile and desktop apps, often need to access back-end services or web APIs that store data and perform functions on behalf of a user. Estas aplicaciones pueden agregar el inicio de sesión y la autorización a los servicios back-end mediante el flujo de código de autorización de OAuth 2.0.These apps can add sign-in and authorization to back-end services by using the OAuth 2.0 authorization code flow.

En este flujo, la aplicación recibe un código de autorización de la Plataforma de identidad de Microsoft cuando el usuario inicia sesión.In this flow, the app receives an authorization code from the Microsoft identity platform when the user signs in. El código de autorización representa el permiso de la aplicación para llamar a servicios de back-end en nombre del usuario que inició la sesión.The authorization code represents the app's permission to call back-end services on behalf of the user who is signed in. La aplicación podrá intercambiar el código de autorización en segundo plano para un token de acceso de OAuth 2.0 y un token de actualización.The app can exchange the authorization code in the background for an OAuth 2.0 access token and a refresh token. La aplicación puede usar el token de acceso para autenticar las API web en las solicitudes HTTP y utilizar el token de actualización para obtener nuevos tokens de acceso cuando expiren los antiguos.The app can use the access token to authenticate to web APIs in HTTP requests, and use the refresh token to get new access tokens when older access tokens expire.

Muestra el flujo de autenticación de la aplicación nativa

Nota

Si la aplicación usa la vista previa predeterminada del sistema, consulte la información sobre la funcionalidad "Confirmar mi inicio de sesión" y el código de error AADSTS50199 en Códigos de error de autenticación y autorización de Azure AD.If the application uses the default system webview, check the information about "Confirm My Sign-In" functionality and error code AADSTS50199 in Azure AD authentication and authorization error codes.

Demonios y aplicaciones de servidorDaemons and server-side apps

Las aplicaciones que contienen procesos de larga duración o que funcionan sin la interacción con un usuario también necesitan un modo de acceder a recursos protegidos, como las API web.Apps that have long-running processes or that operate without interaction with a user also need a way to access secured resources, such as web APIs. Estas aplicaciones pueden autenticarse y obtener tokens mediante la identidad de la aplicación, en lugar de una identidad delegada del usuario, con el flujo de credenciales de cliente de OAuth 2.0.These apps can authenticate and get tokens by using the app's identity, rather than a user's delegated identity, with the OAuth 2.0 client credentials flow. Puede demostrar la identidad de la aplicación mediante un certificado o secreto de cliente.You can prove the app's identity using a client secret or certificate. Para más información, consulte este artículo sobre la aplicación de consola de demonio de .NET Core con la plataforma de identidad de Microsoft.For more info, see .NET Core daemon console application using Microsoft identity platform.

En este flujo, la aplicación interactúa directamente con el punto de conexión /token para obtener acceso:In this flow, the app interacts directly with the /token endpoint to obtain access:

Muestra el flujo de autenticación de la aplicación de demonio

Para compilar una aplicación demonio, consulte la documentación de credenciales de cliente en nuestra sección de introducción o pruebe una aplicación de ejemplo de .NET.To build a daemon app, see the client credentials documentation, or try a .NET sample app.

Pasos siguientesNext steps

Ahora que está familiarizado con los tipos de aplicaciones compatibles con la Plataforma de identidad de Microsoft, obtenga más información sobre OAuth 2.0 y OpenID Connect para comprender los componentes de protocolo que usan los distintos escenarios.Now that you're familiar with the types of applications supported by the Microsoft identity platform, learn more about OAuth 2.0 and OpenID Connect to gain an understanding of the protocol components used by the different scenarios.