Eventos
Campeonato mundial de DataViz de Power BI
14 feb, 16 - 31 mar, 16
Con 4 posibilidades de entrar, podrías ganar un paquete de conferencia y convertirlo en el Live Grand Finale en Las Vegas
Saber másEste explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
Por Rick Anderson
A menudo, los sitios web constan de aplicaciones web individuales que funcionan en conjunto. Para proporcionar una experiencia de inicio de sesión único (SSO), las aplicaciones web dentro de un sitio deben compartir cookies de autenticación. Para admitir este escenario, la pila de protección de datos permite compartir cookie de autenticación de Katana y vales de autenticación de cookie de ASP.NET Core.
En los ejemplos siguientes:
.AspNet.SharedCookie
.AuthenticationType
se establece en Identity.Application
de manera explícita o predeterminada.SharedCookieApp
, para permitir que el sistema de protección de datos comparta las claves de protección de datos.Identity.Application
se usa como el esquema de autenticación. Cualquier esquema que se use, se debe usar de forma coherente dentro y en las aplicaciones de cookie compartidas, ya sea como el esquema predeterminado o estableciendo explícitamente. El esquema se utiliza al cifrar y descifrar las cookies, por lo que debe utilizarse un esquema coherente en todas las aplicaciones.DataProtectionProvider
proporciona servicios de protección de datos para el cifrado y descifrado de los datos de carga de autenticación de cookie. La instancia DataProtectionProvider
está aislada del sistema de protección de datos que usan otras partes de la aplicación. DataProtectionProvider.Create(System.IO.DirectoryInfo, Action<IDataProtectionBuilder>) acepta DirectoryInfo para especificar la ubicación del almacenamiento de claves de protección de datos.DataProtectionProvider
requiere el paquete NuGet Microsoft.AspNetCore.DataProtection.Extensions: Al usar ASP.NET Core Identity:
SharedCookieApp
en los ejemplos siguientes). Para más información, vea Configurar la protección de datos en ASP.NET Core.Identity.Application
.En Program.cs
:
using Microsoft.AspNetCore.DataProtection;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"c:\PATH TO COMMON KEY RING FOLDER"))
.SetApplicationName("SharedCookieApp");
builder.Services.ConfigureApplicationCookie(options => {
options.Cookie.Name = ".AspNet.SharedCookie";
});
var app = builder.Build();
Nota: Las instrucciones anteriores no funcionan con ITicketStore
(CookieAuthenticationOptions.SessionStore
). Para más información, consulte este problema de GitHub.
Por razones de seguridad, las cookies de autenticación no se comprimen en ASP.NET Core. Al utilizar cookies de autenticación, los desarrolladores deben minimizar el número de información de notificación incluida a solo la necesaria para sus necesidades.
Cuando utilices cookies directamente sin Identity de ASP.NET Core, configura la protección de datos y la autenticación. En el ejemplo siguiente, el tipo de autenticación se establece en Identity.Application
:
using Microsoft.AspNetCore.DataProtection;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"c:\PATH TO COMMON KEY RING FOLDER"))
.SetApplicationName("SharedCookieApp");
builder.Services.AddAuthentication("Identity.Application")
.AddCookie("Identity.Application", options =>
{
options.Cookie.Name = ".AspNet.SharedCookie";
});
var app = builder.Build();
Por razones de seguridad, las cookies de autenticación no se comprimen en ASP.NET Core. Al utilizar cookies de autenticación, los desarrolladores deben minimizar el número de información de notificación incluida a solo la necesaria para sus necesidades.
Una autenticación cookie usa HttpRequest.PathBase como el valor de Cookie.Path predeterminado. Si cookie de la aplicación debe compartirse entre diferentes rutas de acceso base, Path
debe invalidarse:
using Microsoft.AspNetCore.DataProtection;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"c:\PATH TO COMMON KEY RING FOLDER"))
.SetApplicationName("SharedCookieApp");
builder.Services.ConfigureApplicationCookie(options => {
options.Cookie.Name = ".AspNet.SharedCookie";
options.Cookie.Path = "/";
});
var app = builder.Build();
Al hospedar aplicaciones que comparten cookies entre subdominios, especifica un dominio común en la propiedad Cookie.Domain. Para compartir cookies entre aplicaciones en contoso.com
, como first_subdomain.contoso.com
y second_subdomain.contoso.com
, especifica Cookie.Domain
como .contoso.com
:
options.Cookie.Domain = ".contoso.com";
Para las implementaciones de producción, configure el DataProtectionProvider
para cifrar las claves en reposo con DPAPI o X509Certificate. Para obtener más información, consulte Cifrado de claves en reposo en Windows y Azure mediante ASP.NET Core. En el ejemplo siguiente, se proporciona una huella digital de certificado a ProtectKeysWithCertificate:
using Microsoft.AspNetCore.DataProtection;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddDataProtection()
.ProtectKeysWithCertificate("{CERTIFICATE THUMBPRINT}");
Cuando las aplicaciones usan el mismo esquema de Identity (misma versión de Identity), confirme que el sistema Identity de cada aplicación apunta a la misma base de datos de usuario. De lo contrario, el sistema de identidad produce errores en tiempo de ejecución cuando intenta hacer coincidir la información de la autenticación cookie con la información de su base de datos.
Cuando el esquema Identity es diferente entre las aplicaciones, normalmente porque las aplicaciones usan versiones de Identity diferentes, compartir una base de datos común basada en la versión más reciente de Identity no es posible sin reasignar ni agregar columnas en los esquemas Identity de otra aplicación. A menudo, es más eficaz actualizar las demás aplicaciones para que usen la versión más reciente de Identity para que las aplicaciones puedan compartir una base de datos común.
En .NET 6, WebApplicationBuilder normaliza la ruta de acceso raíz del contenido para finalizar con DirectorySeparatorChar. La mayoría de las aplicaciones que migran desde HostBuilder o WebHostBuilder no tendrán el mismo nombre de aplicación porque no se normalizan. Para obtener más información, consulte SetApplicationName
Las aplicaciones ASP.NET 4.x que usan middleware de autenticación de Cookie de Microsoft.Owin se pueden configurar para generar cookies de autenticación compatibles con el middleware de autenticación de Cookie de ASP.NET Core. Esto puede ser útil si una aplicación web consta de aplicaciones de ASP.NET 4.x y aplicaciones de ASP.NET Core que deben compartir una experiencia de inicio de sesión único. Un ejemplo específico de este escenario es migrar incrementalmente una aplicación web de ASP.NET a ASP.NET Core. En estos escenarios, es habitual que algunas partes de una aplicación las sirva la aplicación de ASP.NET original, mientras que otras son servidas por la nueva aplicación de ASP.NET Core. Sin embargo, los usuarios solo deben iniciar sesión una vez. Para ello, puede usar cualquiera de los enfoques siguientes:
Para configurar el middleware de autenticación de Cookie de Microsoft.Owin de ASP.NET para compartir cookies con una aplicación ASP.NET Core, sigue las instrucciones anteriores para configurar la aplicación ASP.NET Core para usar un nombre de cookie y un nombre de aplicación específicos, y conservar las claves de protección de datos en una ubicación conocida. Consulte Configuración la protección de datos de ASP.NET Core para obtener más información sobre la conservación de claves de protección de datos.
En la aplicación de ASP.NET, instale el paquete Microsoft.Owin.Security.Interop
.
Actualice la llamada UseCookieAuthentication
en Startup.Auth.cs para configurar aspNetTicketDataFormat para que coincida con la configuración de la aplicación de ASP.NET Core:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
},
// Settings to configure shared cookie with ASP.NET Core app
CookieName = ".AspNet.ApplicationCookie",
AuthenticationType = "Identity.Application",
TicketDataFormat = new AspNetTicketDataFormat(
new DataProtectorShim(
DataProtectionProvider.Create(new DirectoryInfo(@"c:\PATH TO COMMON KEY RING FOLDER"),
builder => builder.SetApplicationName("SharedCookieApp"))
.CreateProtector(
"Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware",
// Must match the Scheme name used in the ASP.NET Core app, i.e. IdentityConstants.ApplicationScheme
"Identity.Application",
"v2"))),
CookieManager = new ChunkingCookieManager()
});
Entre los elementos importantes configurados aquí se incluyen:
System.Web.Helpers.AntiForgeryConfig.UniqueClaimTypeIdentifier
se establece en una notificación de la identidad de ASP.NET Core que será única para un usuario.Dado que el tipo de autenticación se cambió para que coincida con el esquema de autenticación de la aplicación de ASP.NET Core, también es necesario actualizar cómo la aplicación de ASP.NET genera nuevas identidades para usar ese mismo nombre. Normalmente, esto se hace en Models/IdentityModels.cs
:
public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, "Identity.Application");
// Add custom user claims here
return userIdentity;
}
}
Con estos cambios, las aplicaciones ASP.NET y ASP.NET Core pueden usar las mismas cookies de autenticación para que los usuarios que inicien o cierren sesión de una aplicación se reflejan en la otra aplicación.
Tenga en cuenta que, dado que hay diferencias entre los esquemas de base de datos de ASP.NET Identity y ASP.NET Core Identity, se recomienda que los usuarios solo inicien sesión con una de las aplicaciones, ya sea la aplicación de ASP.NET o ASP.NET Core. Una vez que los usuarios hayan iniciado sesión, los pasos documentados en esta sección permitirán que la aplicación pueda cookie la de autenticación y ambas aplicaciones deberían poder cerrar la sesión de los usuarios.
En los ejemplos siguientes:
.AspNet.SharedCookie
.AuthenticationType
se establece en Identity.Application
de manera explícita o predeterminada.SharedCookieApp
).Identity.Application
se usa como el esquema de autenticación. Cualquier esquema que se use, se debe usar de forma coherente dentro y en las aplicaciones de cookie compartidas, ya sea como el esquema predeterminado o estableciendo explícitamente. El esquema se utiliza al cifrar y descifrar las cookies, por lo que debe utilizarse un esquema coherente en todas las aplicaciones.DataProtectionProvider
proporciona servicios de protección de datos para el cifrado y descifrado de los datos de carga de autenticación de cookie. La instancia DataProtectionProvider
está aislada del sistema de protección de datos que usan otras partes de la aplicación. DataProtectionProvider.Create(System.IO.DirectoryInfo, Action<IDataProtectionBuilder>) acepta DirectoryInfo para especificar la ubicación del almacenamiento de claves de protección de datos.DataProtectionProvider
requiere el paquete NuGet Microsoft.AspNetCore.DataProtection.Extensions: Al usar ASP.NET Core Identity:
SharedCookieApp
en los ejemplos siguientes). Para más información, vea Configurar la protección de datos en ASP.NET Core.Identity.Application
.En Startup.ConfigureServices
:
services.AddDataProtection()
.PersistKeysToFileSystem("{PATH TO COMMON KEY RING FOLDER}")
.SetApplicationName("SharedCookieApp");
services.ConfigureApplicationCookie(options => {
options.Cookie.Name = ".AspNet.SharedCookie";
});
Nota: Las instrucciones anteriores no funcionan con ITicketStore
(CookieAuthenticationOptions.SessionStore
). Para más información, consulte este problema de GitHub.
Por razones de seguridad, las cookies de autenticación no se comprimen en ASP.NET Core. Al utilizar cookies de autenticación, los desarrolladores deben minimizar el número de información de notificación incluida a solo la necesaria para sus necesidades.
Cuando utilices cookies directamente sin Identity de ASP.NET Core, configura la autenticación y la protección de datos en Startup.ConfigureServices
. En el ejemplo siguiente, el tipo de autenticación se establece en Identity.Application
:
services.AddDataProtection()
.PersistKeysToFileSystem("{PATH TO COMMON KEY RING FOLDER}")
.SetApplicationName("SharedCookieApp");
services.AddAuthentication("Identity.Application")
.AddCookie("Identity.Application", options =>
{
options.Cookie.Name = ".AspNet.SharedCookie";
});
Por razones de seguridad, las cookies de autenticación no se comprimen en ASP.NET Core. Al utilizar cookies de autenticación, los desarrolladores deben minimizar el número de información de notificación incluida a solo la necesaria para sus necesidades.
Una autenticación cookie usa HttpRequest.PathBase como el valor de Cookie.Path predeterminado. Si cookie de la aplicación debe compartirse entre diferentes rutas de acceso base, Path
debe invalidarse:
services.AddDataProtection()
.PersistKeysToFileSystem("{PATH TO COMMON KEY RING FOLDER}")
.SetApplicationName("SharedCookieApp");
services.ConfigureApplicationCookie(options => {
options.Cookie.Name = ".AspNet.SharedCookie";
options.Cookie.Path = "/";
});
Al hospedar aplicaciones que comparten cookies entre subdominios, especifica un dominio común en la propiedad Cookie.Domain. Para compartir cookies entre aplicaciones en contoso.com
, como first_subdomain.contoso.com
y second_subdomain.contoso.com
, especifica Cookie.Domain
como .contoso.com
:
options.Cookie.Domain = ".contoso.com";
Para las implementaciones de producción, configure el DataProtectionProvider
para cifrar las claves en reposo con DPAPI o X509Certificate. Para obtener más información, consulte Cifrado de claves en reposo en Windows y Azure mediante ASP.NET Core. En el ejemplo siguiente, se proporciona una huella digital de certificado a ProtectKeysWithCertificate:
services.AddDataProtection()
.ProtectKeysWithCertificate("{CERTIFICATE THUMBPRINT}");
Las aplicaciones ASP.NET 4.x que usan el middleware de autenticación de Cookie de Katana se pueden configurar para generar cookies de autenticación compatibles con el middleware de autenticación de Cookie de ASP.NET Core. Para obtener más información, consulta Compartir cookies de autenticación entre aplicaciones ASP.NET 4.x y ASP.NET Core (dotnet/AspNetCore.Docs #21987).
Cuando las aplicaciones usan el mismo esquema de Identity (misma versión de Identity), confirme que el sistema Identity de cada aplicación apunta a la misma base de datos de usuario. De lo contrario, el sistema de identidad produce errores en tiempo de ejecución cuando intenta hacer coincidir la información de la autenticación cookie con la información de su base de datos.
Cuando el esquema Identity es diferente entre las aplicaciones, normalmente porque las aplicaciones usan versiones de Identity diferentes, compartir una base de datos común basada en la versión más reciente de Identity no es posible sin reasignar ni agregar columnas en los esquemas Identity de otra aplicación. A menudo, es más eficaz actualizar las demás aplicaciones para que usen la versión más reciente de Identity para que las aplicaciones puedan compartir una base de datos común.
Comentarios de ASP.NET Core
ASP.NET Core es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios:
Eventos
Campeonato mundial de DataViz de Power BI
14 feb, 16 - 31 mar, 16
Con 4 posibilidades de entrar, podrías ganar un paquete de conferencia y convertirlo en el Live Grand Finale en Las Vegas
Saber másCursos
Módulo
Protección de una aplicación web de .NET mediante el marco de Identity de ASP.NET Core - Training
Obtenga información sobre cómo agregar la autenticación y la autorización a una aplicación web de .NET mediante el marco de Identity de ASP.NET Core.
Certificación
Microsoft Certified: Identity and Access Administrator Associate - Certifications
Muestre las características de Microsoft Entra ID para modernizar las soluciones de identidad, implementar soluciones híbridas e implementar la gobernanza de identidades.
Documentación
Compatibilidad con el Reglamento general de protección de datos (RGPD) en ASP.NET Core
Obtenga información sobre cómo acceder a los puntos de extensión del RGPD en una aplicación web de ASP.NET Core.
Uso de la autenticación cookie sin Identity ASP.NET Core
Obtenga información sobre cómo usar la autenticación cookie sin Identity ASP.NET Core.
Trabajo con cookies de SameSite en ASP.NET Core
Aprende a usar las cookies de SameSite en ASP.NET Core