asp.net - based - identity roles asp net
Identidad Asp.Net-ConfiguraciĆ³n de CookieDomain en tiempo de ejecuciĆ³n (3)
¿Ya pruebas esto?
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Application",
LoginPath = "/Account/Login",
CookieDomain = ".myDomain.com"
});
¿Cómo puedo configurar CookieDOmain en las CookieAuthenticationOptions en tiempo de ejecución si deseo extraer este valor de Request.Url o de algunas configuraciones almacenadas en mi base de datos?
Quiero admitir subdominios, pero también soporto varios inquilinos que tienen diferentes dominios.
En el momento en que está configurado, no tengo acceso a ninguno de estos.
Pablo
Puede asignar su propio proveedor de cookies:
CookieAuthProvider myProvider = new CookieAuthProvider();
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = myProvider
});
Implemente la suya o simplemente herede del proveedor existente:
public class CookieAuthProvider : CookieAuthenticationProvider
{
public override void ResponseSignIn(CookieResponseSignInContext context)
{
//Alter you cookie options
//context.CookieOptions.Domain = "www...";
base.ResponseSignIn(context);
}
}
E implemente ResponseSignIn
, se invoca cuando un punto extremo ha proporcionado información de inicio de sesión antes de convertirse en una cookie. Al implementar este método, las reclamaciones y la información adicional que se incluye en el ticket pueden verse alteradas.
Se le CookieResponseSignInContext
un CookieResponseSignInContext
, que expone la propiedad CookieOptions
que se puede reemplazar o modificar durante la llamada ResponseSignIn
.
Referencias de código del proyecto Katana:
Parece MK. la respuesta no permite un manejo adecuado de la renovación del token cuando se usa la opción SlidingExpiration
.
Como solución alternativa, en lugar de proporcionar un proveedor de cookies personalizado, parece que puede suministrar un administrador de cookies personalizado y definir sus propios métodos para agregar / eliminar la cookie.
Para mantenerlo simple en mi caso, reutilizo el administrador de cookies predeterminado bajo el capó. (No puedo extenderlo, sus métodos no son reemplazables).
Aquí está el código con el que terminé:
using Microsoft.AspNet.Identity;
using Microsoft.Owin;
using Microsoft.Owin.Infrastructure;
using Microsoft.Owin.Security.Cookies;
using Microsoft.Owin.Security.DataProtection;
using Owin;
public class Startup
{
public void Configuration(IAppBuilder app)
{
var options = new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
SlidingExpiration = true,
CookieManager = new CustomCookieManager()
};
app.UseCookieAuthentication(options);
}
}
public class CustomCookieManager : ICookieManager
{
private readonly ICookieManager ConcreteManager;
public CustomCookieManager()
{
ConcreteManager = new ChunkingCookieManager();
}
string ICookieManager.GetRequestCookie(IOwinContext context, string key)
{
return ConcreteManager.GetRequestCookie(context, key);
}
void ICookieManager.AppendResponseCookie(IOwinContext context, string key, string value, CookieOptions options)
{
SetupDomain(context, options);
ConcreteManager.AppendResponseCookie(context, key, value, options);
}
void ICookieManager.DeleteCookie(IOwinContext context, string key, CookieOptions options)
{
SetupDomain(context, options);
ConcreteManager.DeleteCookie(context, key, options);
}
private void SetupDomain(IOwinContext context, CookieOptions options)
{
// custom logic for assigning something to options.Domain
}
}