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.

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