Compartir a través de


Tutorial: Preparación de una aplicación web de ASP.NET Core para la autenticación en un inquilino externo

Este tutorial es la parte 2 de una serie donde se muestra cómo compilar una aplicación web de ASP.NET Core y prepararla para la autenticación mediante el Centro de administración Microsoft Entra. En la Parte 1 de esta serie, registró una aplicación y configuró los flujos de usuario en el inquilino externo. En este tutorial se muestra cómo crear una aplicación web de ASP.NET Core y configurarla para la autenticación.

En este tutorial, aprenderás lo siguiente;

  • Creación de un proyecto de ASP.NET Core en Visual Studio Code
  • Agregar los paquetes NuGet necesarios
  • Configure las opciones de la aplicación
  • Agregar código para implementar la autenticación

Requisitos previos

Crear un proyecto de ASP.NET Core

  1. Abra Visual Studio Code, seleccione Archivo >Abrir carpeta.... Navegue y seleccione la ubicación en la que se va a crear el proyecto.

  2. Abra una terminal nueva seleccionando Terminal >Crear terminal.

  3. Escriba el siguiente comando para crear un proyecto de Modelo-Vista-Controlador (MVC) ASP.NET Core.

    dotnet new mvc -n dotnetcore_webapp
    

Instalación de paquetes de identidad

Los paquetes NuGet relacionados con la identidad deben instalarse en el proyecto para autenticar a los usuarios.

  1. Escriba los siguientes comandos para cambiar a la carpeta dotnetcore_webapp e instalar el paquete NuGet correspondiente:

    cd dotnetcore_webapp
    dotnet add package Microsoft.Identity.Web.UI
    

Configuración de la aplicación para la autenticación

  1. Abra el archivo appsettings.json y reemplace el código existente con el siguiente fragmento de código:

    {
      "AzureAd": {
        "Authority": "https://Enter_the_Tenant_Subdomain_Here.ciamlogin.com/",
        "ClientId": "Enter_the_Application_Id_Here",
        "ClientCredentials": [
          {
            "SourceType": "ClientSecret",
            "ClientSecret": "Enter_the_Client_Secret_Here"
          }
        ],
        "CallbackPath": "/signin-oidc",
        "SignedOutCallbackPath": "/signout-callback-oidc"
      },
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "AllowedHosts": "*"
    }
    
    • Authority: la instancia del proveedor de identidades y un público de inicio de sesión de la aplicación. Reemplace Enter_the_Tenant_Subdomain_Here por el subdominio del inquilino externo. Para encontrarlo, seleccione Información general en el menú de la barra lateral y, a continuación, cambie a la pestaña Información general. Busque el dominio principal, en el formulario caseyjensen.onmicrosoft.com. El subdominio es caseyjensen.
    • ClientId - El identificador de la aplicación, también denominado cliente. Reemplace el texto entre comillas por el valor de identificador del directorio (inquilino) que se registró anteriormente en la página de información general de la aplicación registrada.
    • ClientSecret: el valor del secreto de cliente que creó en Preparación del inquilino. Reemplace el texto entre comillas por el valor del secreto de cliente en el Centro de administración de Microsoft Entra.
    • CallbackPath - Es un identificador para ayudar al servidor a redirigir una respuesta a la aplicación adecuada.
  2. Guarde los cambios realizados en el archivo.

  3. Abra el archivo Properties/launchSettings.json.

  4. En la sección https de profiles, cambie la dirección URL https en applicationUrl para que ponga https://localhost:7274. Ha usado esta dirección URL para definir el URI de redirección.

  5. Guarde los cambios en el archivo.

Uso del dominio de dirección URL personalizado (opcional)

Use un dominio personalizado para personalizar completamente la dirección URL de autenticación. Desde el punto de vista del usuario, este permanece en el dominio durante el proceso de autenticación, en lugar de que se le redirija al nombre de dominio ciamlogin.com.

Sigue estos pasos para usar un dominio personalizado:

  1. Sigue los pasos descritos en Habilitar dominios de dirección URL personalizados para aplicaciones en inquilinos externos para habilitar la dirección URL de dominio personalizado para el inquilino externo.

  2. Abre el archivo appsettings.json:

    1. Actualice el valor de la propiedad Authority a https://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here. Reemplaza Enter_the_Custom_Domain_Here por la dirección URL de dominio personalizado y Enter_the_Tenant_ID_Here por el identificador del inquilino. Si no tiene el identificador del inquilino, obtenga información sobre cómo leer los detalles del inquilino.
    2. Agregue la propiedad knownAuthorities con un valor [Escriba_aquí_el_dominio_personalizado].

Después de realizar los cambios en el archivo appsettings.json, si la dirección URL del dominio personalizado es login.contoso.com y el identificador de inquilino es aaaabbbb-0000-cccc-1111-dddd2222eeee, el archivo deberá tener un aspecto similar al siguiente fragmento de código:

{
  "AzureAd": {
    "Authority": "https://login.contoso.com/aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "ClientId": "Enter_the_Application_Id_Here",
    "ClientCredentials": [
      {
        "SourceType": "ClientSecret",
        "ClientSecret": "Enter_the_Client_Secret_Here"
      }
    ],
    "CallbackPath": "/signin-oidc",
    "SignedOutCallbackPath": "/signout-callback-oidc",
    "KnownAuthorities": ["login.contoso.com"]
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

Agregar autorización a HomeController.cs

El archivo HomeController.cs contiene el código de la página principal de la aplicación y debe tener la capacidad de autorizar al usuario. El espacio de nombres Microsoft.AspNetCore.Authorization proporciona las clases e interfaces para implementar la autorización en la aplicación web y el atributo [Authorize] se usa para especificar que solo los usuarios autenticados pueden usar la aplicación web.

  1. En el editor de código, abra el archivo Controllers\HomeController.cs.

  2. Debe agregarle la autorización al controlador, así que agregue Microsoft.AspNetCore.Authorization para que la parte superior del archivo y el siguiente fragmento de código sean idénticos:

    using System.Diagnostics;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc;
    using dotnetcore_webapp.Models;
    
  3. Además, agrega el atributo [Authorize] directamente encima de la definición de clase HomeController.

    [Authorize]
    

Agregar autenticación y autorización a Program.cs

Program.cs debe modificarse para agregar autenticación y autorización a la aplicación web. Esto incluye agregar espacios de nombres para autenticación y autorización, y poder iniciar sesión en los usuarios con la plataforma de identidad de Microsoft.

  1. Para agregar los espacios de nombres necesarios, abre Program.cs y agrega el siguiente fragmento de código en la parte superior del archivo:

    using Microsoft.AspNetCore.Authentication.OpenIdConnect;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc.Authorization;
    using Microsoft.Identity.Web;
    using Microsoft.Identity.Web.UI;
    using System.IdentityModel.Tokens.Jwt;
    
  2. A continuación, agrega los servicios de autenticación a la aplicación que permitirán que la aplicación web inicie la sesión de los usuarios con la plataforma de identidad de Microsoft. Puedes reemplazar el resto del código en Program.cs por el siguiente fragmento de código:

    var builder = WebApplication.CreateBuilder(args);
    
    // Add services to the container.
    builder.Services.AddControllersWithViews();
    
    // This is required to be instantiated before the OpenIdConnectOptions starts getting configured.
    // By default, the claims mapping will map claim names in the old format to accommodate older SAML applications.
    // For instance, 'http://schemas.microsoft.com/ws/2008/06/identity/claims/role' instead of 'roles' claim.
    // This flag ensures that the ClaimsIdentity claims collection will be built from the claims in the token
    JwtSecurityTokenHandler.DefaultMapInboundClaims = false;
    
    // Sign-in users with the Microsoft identity platform
    builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(builder.Configuration)
        .EnableTokenAcquisitionToCallDownstreamApi()
        .AddInMemoryTokenCaches();
    
    builder.Services.AddControllersWithViews(options =>
    {
        var policy = new AuthorizationPolicyBuilder()
            .RequireAuthenticatedUser()
            .Build();
        options.Filters.Add(new AuthorizeFilter(policy));
    }).AddMicrosoftIdentityUI();
    
    var app = builder.Build();
    
    // Configure the HTTP request pipeline.
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Home/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    }
    
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    
    app.UseRouting();
    app.UseAuthorization();
    
    app.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    
    app.Run();
    
    

Paso siguiente