Inicio rápido: Inicio de sesión de usuarios y llamada a Microsoft Graph API desde una aplicación web de ASP.NET

En este inicio rápido, se descarga y ejecuta un ejemplo de código que muestra cómo una aplicación web de ASP.NET puede realizar el inicio de sesión de usuarios con cuentas de Microsoft Entra.

Para ilustrar este tema, consulte el apartado en el que se explica el funcionamiento del ejemplo.

Requisitos previos

Registro y descarga de la aplicación

Sugerencia

Los pasos de este artículo pueden variar ligeramente en función del portal desde donde comienza.

Tiene dos opciones para empezar a crear la aplicación: usar la configuración automática o la manual.

Configuración automática

Si desea configurar automáticamente la aplicación y, a continuación, descargar el ejemplo de código, siga estos pasos:

  1. Inicie sesión en la experiencia de inicio rápido del Centro de administración de Microsoft Entra como Administrador de aplicaciones en la nube como mínimo.
  2. Escriba un nombre para la aplicación y seleccione Registrar.
  3. Siga las instrucciones para descargar y configurar automáticamente la nueva aplicación con un clic.

Configuración manual

Si desea configurar manualmente la aplicación y el ejemplo de código, siga estos pasos.

Paso 1: Registrar su aplicación

  1. Inicie sesión en el Centro de administración de Microsoft Entra como Administrador de aplicaciones en la nube.
  2. Si tiene acceso a varios inquilinos, use el icono Configuración del menú superior para cambiar al inquilino en el que desea registrar la aplicación desde el menú Directorios y suscripciones.
  3. Vaya a Identidad>Aplicaciones>Registros de aplicaciones y seleccione Nuevo registro.
  4. Escriba un nombre para la aplicación. Por ejemplo, especifique ASPNET-Quickstart. Los usuarios de la aplicación verán este nombre, que puede cambiar más tarde.
  5. Establezca el tipo de URI de redirección en Web y el valor en https://localhost:44368/.
  6. Seleccione Registrar.
  7. En Administrar, seleccione Autenticación.
  8. En la sección Implicit grant and hybrid flows (Flujos de concesión implícita e híbridos), seleccione Tokens de id.
  9. Seleccione Guardar.

Paso 2: Descarga del proyecto

Descargue el código de ejemplo de ASP.NET.

Sugerencia

Se recomienda extraer el archivo o clonar el repositorio en un directorio próximo a la raíz de la unidad para evitar los errores provocados por las limitaciones de longitud de la ruta de acceso en Windows.

Paso 3: Ejecución del proyecto

  1. Extraiga el archivo. zip en una carpeta local que esté próxima a la carpeta raíz. Por ejemplo, en C:\Azure-Samples.

    Se recomienda extraer el archivo en un directorio próximo a la raíz de la unidad para evitar errores provocados por las limitaciones de longitud de la ruta de acceso en Windows.

  2. Abra la solución en Visual Studio (AppModelv2-WebApp-OpenIDConnect-DotNet.sln).

  3. Según la versión de Visual Studio que use, es posible que tenga que hacer clic con el botón derecho en el proyecto AppModelv2-WebApp-OpenIDConnect-DotNet y después en Restaurar paquetes NuGet.

  4. Abra la Consola del Administrador de paquetes seleccionando Ver>Otras ventanas>Consola del Administrador de paquetes. A continuación, ejecute Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r.

  5. Edite appsettings.json y reemplace los parámetros ClientId, Tenant y redirectUri por:

    "ClientId" :"Enter_the_Application_Id_here" />
    "TenantId": "Enter_the_Tenant_Info_Here" />
    "RedirectUri" :"https://localhost:44368/" />
    

    En el código:

    • Enter_the_Application_Id_here es el identificador de aplicación (cliente) correspondiente al registro de aplicación que creó anteriormente. Busque el identificador de la aplicación (cliente) en la página Información general de la aplicación en Registros de aplicaciones en el Centro de administración de Microsoft Entra.
    • Enter_the_Tenant_Info_Here es una de las siguientes opciones:
      • Si la aplicación admite Solo mi organización, reemplace este valor por el identificador de directorio (inquilino) o el nombre de inquilino (por ejemplo, contoso.onmicrosoft.com). Busque el identificador del directorio (inquilino) en la página Información general de la aplicación en Registros de aplicaciones en el Centro de administración de Microsoft Entra.
      • Si la aplicación admite Cuentas en cualquier directorio organizativo, reemplace este valor por organizations.
      • Si la aplicación admite Todos los usuarios de cuentas Microsoft, reemplace este valor por common.
    • redirectUri es el URI de redirección que especificó anteriormente en Registros de aplicaciones en el Centro de administración de Microsoft Entra.

Más información

En esta sección, se proporciona una introducción al código necesario para el inicio de sesión de usuarios. Esta introducción puede ser útil para comprender cómo funciona el código, cuáles son los argumentos principales y cómo agregar el inicio de sesión a una aplicación ASP.NET existente.

Funcionamiento del ejemplo

Diagrama de la interacción entre el explorador web, la aplicación web y la plataforma de identidad de Microsoft en la aplicación de ejemplo.

Paquetes NuGet del middleware OWIN

Puede configurar la canalización de autenticación con la autenticación basada en cookies mediante OpenID Connect en ASP.NET con paquetes del middleware OWIN. Puede instalar estos paquetes mediante la ejecución del siguiente comando en la Consola del Administrador de paquetes de Visual Studio:

Install-Package Microsoft.Identity.Web.Owin
Install-Package Microsoft.Identity.Web.GraphServiceClient
Install-Package Microsoft.Owin.Security.Cookies

Clase de inicio de OWIN

El middleware OWIN usa una clase de inicio que se ejecuta cuando se inicia el proceso de hospedaje. En este inicio rápido, el archivo startup.cs se encuentra en la carpeta raíz. En el código siguiente se muestran los parámetros que usa este inicio rápido:

    public void Configuration(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

        app.UseCookieAuthentication(new CookieAuthenticationOptions());
        OwinTokenAcquirerFactory factory = TokenAcquirerFactory.GetDefaultInstance<OwinTokenAcquirerFactory>();

        app.AddMicrosoftIdentityWebApp(factory);
        factory.Services
            .Configure<ConfidentialClientApplicationOptions>(options => { options.RedirectUri = "https://localhost:44368/"; })
            .AddMicrosoftGraph()
            .AddInMemoryTokenCaches();
        factory.Build();
    }
Where Descripción
ClientId El identificador de la aplicación registrada en Azure Portal.
Authority El punto de conexión del servicio de token de seguridad (STS) para que el usuario se autentique. Normalmente, es https://login.microsoftonline.com/{tenant}/v2.0 para la nube pública. En esta URL, {tenant} es el nombre del inquilino, su descripción o common si se hace referencia al punto de conexión común. El punto de conexión común se usa para las aplicaciones multiinquilino.
RedirectUri La dirección URL a la que se envía a los usuarios después de la autenticación en la plataforma de identidad de Microsoft.
PostLogoutRedirectUri La dirección URL a donde se envía a los usuarios después de cerrar sesión.
Scope La lista de ámbitos que se solicitan, separados por espacios.
ResponseType La solicitud de que la respuesta de la autenticación contenga un código de autorización y un token de identificador.
TokenValidationParameters Una lista de parámetros para la validación del token. En este caso, ValidateIssuer está establecido en false para indicar que puede aceptar inicios de sesión desde cualquier tipo de cuenta: personal, profesional o educativa.
Notifications Una lista de los delegados que se pueden ejecutar en mensajes OpenIdConnect.

Desafío de autenticación

Puede forzar a un usuario para que inicie sesión si solicita un desafío de autenticación en el controlador:

public void SignIn()
{
    if (!Request.IsAuthenticated)
    {
        HttpContext.GetOwinContext().Authentication.Challenge(
            new AuthenticationProperties{ RedirectUri = "/" },
            OpenIdConnectAuthenticationDefaults.AuthenticationType);
    }
}

Sugerencia

La solicitud de un desafío de autenticación mediante este método es opcional. Normalmente se usa cuando se desea que una vista sea accesible tanto para usuarios autenticados como no autenticados. También puede proteger los controladores mediante el método descrito en la sección siguiente.

Atributo para proteger un controlador o las acciones de un controlador

Puede proteger un controlador o sus acciones mediante el atributo [Authorize]. Este atributo restringe el acceso al controlador o a sus acciones al permitir que solo los usuarios autenticados puedan acceder a estas acciones. Cuando un usuario no autenticado intente acceder a una de las acciones o de los controladores representados por el atributo [Authorize], se producirá automáticamente un desafío de autenticación.

Llamada a Microsoft Graph desde el controlador

Puede llamar a Microsoft Graph desde el controlador obteniendo la instancia de GraphServiceClient usando el método de extensión GetGraphServiceClient en el controlador, como en el código siguiente:

    try
    { 
        var me = await this.GetGraphServiceClient().Me.GetAsync();
        ViewBag.Username = me.DisplayName;
    }
    catch (ServiceException graphEx) when (graphEx.InnerException is MicrosoftIdentityWebChallengeUserException)
    {
        HttpContext.GetOwinContext().Authentication.Challenge(OpenIdConnectAuthenticationDefaults.AuthenticationType);
        return View();
    }

Ayuda y soporte técnico

Si necesita ayuda, desea informar de un problema o desea obtener información sobre las opciones de soporte técnico, consulte Opciones de ayuda y soporte técnico para desarrolladores.

Pasos siguientes

Visite el tutorial de ASP.NET para acceder a una guía completa paso a paso sobre la creación de aplicaciones y nuevas características, que incluye una explicación completa de este inicio rápido.