Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: inquilinos de personal
inquilinos externos (más información)
En este tutorial, agregará los elementos de autenticación y autorización a una aplicación web de ASP.NET Core. En el tutorial anterior, creó un proyecto de ASP.NET Core y lo configuró para la autenticación.
En este tutorial, harás lo siguiente:
- Adición de elementos de autorización y autenticación al código
- Habilitación de la visualización de notificaciones en un token de id.
- Agregar las experiencias de inicio y cierre de sesión
Prerrequisitos
- Finalización de los requisitos previos y los pasos descritos en Tutorial: Configuración de una aplicación web de ASP.NET Core que autentica a los usuarios.
Adición de elementos de autenticación y autorización
Los archivos HomeController.cs y Program.cs deben modificarse para agregar los elementos de autenticación y autorización a la aplicación web ASP.NET Core. Esto incluye administrar la página principal, agregar espacios de nombres correctos y configurar el inicio de sesión.
Agregar autorización a HomeController.cs
La página principal de la aplicación debe tener la capacidad de autorizar al usuario. El Microsoft.AspNetCore.Authorization
espacio de nombres proporciona las clases e interfaces para implementar la autorización en la aplicación web. El [Authorize]
atributo se usa para especificar que solo los usuarios autenticados pueden usar la aplicación web.
En la aplicación web, abra Controllers/HomeController.cs y agregue el siguiente fragmento de código a la parte superior del archivo:
using System.Diagnostics; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using dotnetcore_webapp.Models;
Agregue el
[Authorize]
atributo encima de laHomeController
definición de clase, como se muestra en el siguiente fragmento de código:[Authorize] public class HomeController : Controller { ...
Adición de elementos de autenticación y autorización a Program.cs
El archivo Program.cs es el punto de entrada de la aplicación y debe modificarse para agregar autenticación y autorización a la aplicación web. Los servicios deben agregarse para permitir que la aplicación use la configuración definida en appsettings.json para la autenticación.
Agregue los siguientes espacios de nombres al principio 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;
A continuación, agregue el servicio de autenticación de aplicaciones web de identidad de Microsoft, que configura la aplicación para usar Microsoft Identity para la autenticación.
// 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. // 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();
A continuación, el middleware debe configurarse para habilitar las funcionalidades de autenticación. Reemplace el resto del código por el fragmento de código siguiente.
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();
Agregar la experiencia de inicio y cierre de sesión
La interfaz de usuario debe ser actualizaciones para proporcionar una experiencia más fácil de usar para el inicio de sesión y el cierre de sesión. En esta sección se muestra cómo crear un archivo que muestre elementos de navegación basados en el estado de autenticación del usuario. El código lee las reclamaciones del token ID para comprobar que el usuario está autenticado y usa User.Claims
para extraer las reclamaciones del token ID.
Cree un nuevo archivo en Views/Shared y asígnele el nombre _LoginPartial.cshtml.
Abra el archivo y agregue el código siguiente para agregar la experiencia de inicio de sesión y cierre de sesión:
@using System.Security.Principal <ul class="navbar-nav"> @if (User.Identity is not null && User.Identity.IsAuthenticated) { <li class="nav-item"> <span class="nav-link text-dark">Hello @User.Claims.First(c => c.Type == "preferred_username").Value!</span> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a> </li> } else { <li class="nav-item"> <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a> </li> } </ul>
Abra Views/Shared/_Layout.cshtml y agregue una referencia a
_LoginPartial
creada en el paso anterior. Coloque esto cerca del final de lanavbar-nav
clase como se muestra en el siguiente fragmento de código:<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between"> <ul class="navbar-nav flex-grow-1"> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a> </li> </ul> <partial name="_LoginPartial" /> </div>
Uso del dominio de dirección URL personalizado (opcional)
Se aplica a: inquilinos de personal
inquilinos externos (más información)
Use un dominio personalizado para personalizar completamente la dirección URL de autenticación. Desde la perspectiva del usuario, los usuarios permanecen en el dominio durante el proceso de autenticación, en lugar de redirigirse al nombre de dominio ciamlogin.com .
Siga estos pasos para usar un dominio personalizado:
Siga los pasos descritos en Habilitación de dominios url personalizados para aplicaciones en inquilinos externos para habilitar el dominio de dirección URL personalizado para el inquilino externo.
Abra appsettings.json archivo:
- Actualice los parámetros
Instance
yTenantId
a una propiedadAuthority
. - Agregue la siguiente cadena al valor de
Authority
ahttps://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here
. Reemplace porEnter_the_Custom_Domain_Here
el dominio de dirección URL personalizado yEnter_the_Tenant_ID_Here
por el identificador de inquilino. Si no tiene el identificador del inquilino, obtenga información sobre cómo leer los detalles del inquilino. - Agregue una
knownAuthorities
propiedad con un valor [Enter_the_Custom_Domain_Here].
- Actualice los parámetros
Después de realizar los cambios en el archivo appsettings.json , si el dominio de dirección URL personalizado está login.contoso.com y el identificador de inquilino es aaaabbbb-0000-cccc-1111-dddd2222eeee, el archivo debe 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",
"ClientCertificates": [
{
"SourceType": "StoreWithThumbprint",
"CertificateStorePath": "CurrentUser/My",
"CertificateThumbprint": "AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00"
}
],
"CallbackPath": "/signin-oidc",
"SignedOutCallbackPath": "/signout-callback-oidc",
"KnownAuthorities": ["login.contoso.com"]
...