Inicio rápido: Inicio de sesión de usuarios en una aplicación web de ASP.NET Core

En este inicio rápido, creará una aplicación web de ASP.NET Core que inicia sesión de los usuarios con Microsoft Entra ID mediante Microsoft. Identity.Web. Puede inicializar un nuevo proyecto desde una plantilla o agregar autenticación a una aplicación existente.

Si no tiene una entidad de Microsoft Entra, cree una cuenta gratuita antes de empezar.

Prerrequisitos

  • SDK de .NET 9
  • Un tenant de Microsoft Entra ID
  • Un registro de aplicaciones en el entorno de Microsoft Entra. Si necesita crear una, consulte Registrar la aplicación.

Creación de un proyecto a partir de la plantilla

La forma más rápida de empezar es generar un nuevo proyecto con la autenticación ya preconfigurada.

Ejecute los comandos siguientes para crear una nueva aplicación web con autenticación de una sola organización y vaya al directorio del proyecto:

dotnet new webapp --auth SingleOrg --name MyWebApp
cd MyWebApp

La plantilla genera un proyecto con Microsoft. Identity.Web ya configurado. Solo tienes que proporcionar los detalles del registro de la aplicación.

Abra appsettings.json y reemplace los valores de marcador de posición por el identificador de aplicación (cliente) y el identificador de directorio (inquilino) del registro de la aplicación:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "your-tenant-id",
    "ClientId": "your-client-id",
    "CallbackPath": "/signin-oidc"
  }
}

Inicie la aplicación para comprobar que el inicio de sesión funciona:

dotnet run

Vaya a https://localhost:5001 y seleccione Iniciar sesión. Si aparece un Microsoft mensaje de inicio de sesión, la configuración es correcta.

Adición de autenticación a una aplicación web existente

Si tiene una aplicación de ASP.NET Core existente, siga estos pasos para agregar Microsoft Entra inicio de sesión.

Instalación de paquetes NuGet

Agregue las bibliotecas Microsoft.Identity.Web. El paquete Microsoft.Identity.Web controla la autenticación y Microsoft.Identity.Web.UI proporciona componentes de interfaz de usuario de inicio de sesión y cierre de sesión creados previamente:

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

Configuración de servicios de autenticación

Abra Program.cs y agregue los servicios de autenticación. El código siguiente registra la autenticación de OpenID Connect con Microsoft Entra, habilita la adquisición de tokens para las llamadas API de nivel inferior y agrega la interfaz de usuario de inicio de sesión o cierre de sesión:

using Microsoft.Identity.Web;
using Microsoft.Identity.Web.UI;

var builder = WebApplication.CreateBuilder(args);

// Add authentication
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
                .AddMicrosoftIdentityWebApp(builder.Configuration, "AzureAd")
                .EnableTokenAcquisitionToCallDownstreamApi() // Optional: if calling APIs
                .AddInMemoryTokenCaches(); // For production, use distributed cache

// Add Razor Pages or MVC
builder.Services.AddRazorPages()
    .AddMicrosoftIdentityUI(); // Adds sign-in/sign-out UI

var app = builder.Build();

// Configure middleware
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();

app.UseAuthentication(); //  Add authentication middleware
app.UseAuthorization();

app.MapRazorPages();
app.MapControllers();

app.Run();

Agregar configuración de Microsoft Entra

Abra appsettings.json y agregue la AzureAd sección . Reemplace los valores de marcador de posición por el identificador de aplicación (cliente) del registro de la aplicación. Establézcalo TenantId para el público adecuado para su aplicación.

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "common",
    "ClientId": "your-client-id-from-app-registration",
    "CallbackPath": "/signin-oidc"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.Identity.Web": "Information"
    }
  }
}

El TenantId valor determina qué cuentas pueden iniciar sesión:

Importancia Cuentas aceptadas
common Cuentas de Microsoft profesionales/educativas y personales
organizations Solo cuentas profesionales o educativas
consumers Solo cuentas personales de Microsoft
<your-tenant-id> Inquilino único: solo su organización

Proteger tus páginas

Agregue el [Authorize] atributo a páginas o controladores que requieren inicio de sesión.

Para Razor Pages, el [Authorize] atributo redirige a los usuarios no autenticados a la página de inicio de sesión. Después del inicio de sesión, las notificaciones de usuario como Name y preferred_username están disponibles a través del User objeto :

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.RazorPages;

[Authorize] //  Require authentication
public class IndexModel : PageModel
{
    public void OnGet()
    {
        var userName = User.Identity?.Name;
        var userEmail = User.FindFirst("preferred_username")?.Value;
    }
}

Para los controladores MVC, el mismo [Authorize] atributo se aplica en el nivel de controlador o acción:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

[Authorize] //  Require authentication
public class HomeController : Controller
{
    public IActionResult Index()
    {
        var userName = User.Identity?.Name;
        return View();
    }
}

Agregue vínculos de navegación al diseño para que los usuarios puedan iniciar sesión y cerrar sesión. El paquete MicrosoftIdentity proporciona las rutas de área Microsoft.Identity.Web.UI. El siguiente marcado de Razor representa de forma condicional Cerrar sesión o Iniciar sesión en función del estado de autenticación del usuario:

<ul class="navbar-nav">
    @if (User.Identity?.IsAuthenticated == true)
    {
        <li class="nav-item">
            <span class="nav-link">Hello @User.Identity.Name!</span>
        </li>
        <li class="nav-item">
            <a class="nav-link" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
        </li>
    }
    else
    {
        <li class="nav-item">
            <a class="nav-link" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a>
        </li>
    }
</ul>

Ejecución y prueba

Inicie la aplicación para comprobar que la autenticación funciona:

dotnet run

Navegue a https://localhost:5001. Debería ver un vínculo Iniciar sesión . Selecciónelo para confirmar que el flujo de inicio de sesión de Microsoft se completa correctamente.

Registrar su aplicación

Si aún no tiene un registro de aplicación, siga estos pasos para crear uno en el portal de Azure.

  1. Inicie sesión en el portal de Azure.
  2. Vaya a Microsoft Entra ID>Registros de aplicaciones>Nuevo registro.
  3. Escriba un nombre para mostrar (por ejemplo, "Mi aplicación web").
  4. Seleccione los tipos de cuenta admitidos:
    • Inquilino único : solo usuarios de su organización
    • Multitenant — usuarios en cualquier organización
    • Multi-tenant + personal : todas las cuentas de Microsoft
  5. En URI de redirección, establezca la plataforma en Web y escriba https://localhost:5001/signin-oidc.
  6. Seleccione Registrar.
  7. En la página de información general, copie el identificador de aplicación (cliente) y el identificador de directorio (inquilino). Necesita estos valores para los campos ClientId y TenantId en appsettings.json.

Configuración de opciones opcionales

El escenario podría requerir esta configuración adicional.

Habilitar la emisión de tokens de ID: algunos escenarios de autenticación híbrida requieren que los tokens de ID se emitan directamente desde el punto de conexión de autorización. Flujo de código de autorización (usado por Microsoft. Identity.Web) es el enfoque recomendado. Solo habilite esta configuración si el escenario lo requiere específicamente:

  1. En el registro de la aplicación, vaya a Autenticación.
  2. En Concesión implícita y flujos híbridos, seleccione Tokens de identificador.
  3. Haga clic en Guardar.

Note

El flujo de concesión implícita es un flujo heredado. Microsoft recomienda el flujo de código de autorización con PKCE para todas las aplicaciones nuevas. Para obtener más información, consulte la documentación de Plataforma de identidad de Microsoft.

Configurar la URL de cierre de sesión del front-channel: garantiza que los usuarios cierren sesión en tu aplicación cuando cierren sesión de Microsoft Entra.

  1. En el registro de la aplicación, vaya a Autenticación.
  2. En Dirección URL de cierre de sesión del canal frontal, introduzca https://localhost:5001/signout-oidc.
  3. Haga clic en Guardar.

Solución de errores comunes

Si tiene problemas durante el inicio de sesión, compruebe si hay estos errores comunes.

Error Causa Solución
AADSTS50011: sin dirección de respuesta registrada Error de coincidencia de URI de redirección entre el código y el registro de aplicaciones Verifique que la URI de redireccionamiento del registro de la aplicación sea igual a CallbackPath (/signin-oidc de forma predeterminada)
AADSTS700016: no se encontró la aplicación Incorrecto ClientId en la configuración Confirme que el identificador de aplicación (cliente) en appsettings.json coincide con el registro de la aplicación
Error de configuración de autoridad Falta o no es válido Instance o TenantId Establezca Instance en https://login.microsoftonline.com/ y confirme que TenantId es válido