Server-Seite behauptet-caching mit Owin-Authentifizierung
Ich habe eine Anwendung, die verwendet werden, um FormsAuthentication
und vor einer Weile schaltete ich es verwenden IdentityModel
aus WindowsIdentityFramework
so, dass ich davon profitieren könnten, die anspruchsbasierte Authentifizierung, aber es war ziemlich hässlich zu verwenden und zu implementieren. So, jetzt bin ich auf der Suche bei OwinAuthentication
.
Ich freu mich auf OwinAuthentication
und die Asp.Net Identity
Rahmen. Aber die Asp.Net Identity
framework, nur die Umsetzung im moment verwendet EntityModel
und ich bin mit nHibernate
. So jetzt bin ich auf der Suche, um zu versuchen, unter Umgehung Asp.Net Identity
und verwenden nur die Owin Authentication
direkt. Ich war schließlich in der Lage, eine funktionierende Anmeldung mit den Tipps von "Wie kann ich ignorieren Sie die Identität Framework Magie und benutzen Sie einfach die OWIN auth-middleware, um die Ansprüche, die ich Suche?", aber jetzt ist mein cookie hält die Ansprüche Recht groß ist. Wenn ich IdentityModel
ich war in der Lage, einen server-side caching-Mechanismus zwischengespeichert, die Ansprüche auf die server und das cookie hielt nur ein einfaches token für die Cache-Informationen. Gibt es eine ähnliche Funktion in OwinAuthentication
oder würde ich haben, um es zu implementieren selbst?
Ich erwarte, dass ich werde in eines der Boote...
- Das cookie bleibt als 3KB, oh gut, es ist ein wenig groß.
- Aktivieren Sie ein feature wie
IdentityModel
's SessionCaching inOwin
dass weiß ich nicht. - Schreibe meine eigene Implementierung zum Zwischenspeichern von Informationen, wodurch die cookie aufblasen und sehen, ob ich es hook up wenn ich bei der Konfiguration
Owin
beim Start der Anwendung. -
Ich mache diese alle falsch und es ist ein Ansatz, ich habe nicht daran gedacht oder ich bin missbraucht, etwas in
Owin
.public class OwinConfiguration { public void Configuration(IAppBuilder app) { app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = "Application", AuthenticationMode = AuthenticationMode.Active, CookieHttpOnly = true, CookieName = "Application", ExpireTimeSpan = TimeSpan.FromMinutes(30), LoginPath = "/Login", LogoutPath = "/Logout", ReturnUrlParameter="ReturnUrl", SlidingExpiration = true, Provider = new CookieAuthenticationProvider() { OnValidateIdentity = async context => { //handle custom caching here?? } } //CookieName = CookieAuthenticationDefaults.CookiePrefix + ExternalAuthentication.ExternalCookieName, //ExpireTimeSpan = TimeSpan.FromMinutes(5), }); } }
UPDATE
Ich war in der Lage, den gewünschten Effekt mit den Informationen Hongye zur Verfügung gestellt, und ich kam mit der unten-Logik...
Provider = new CookieAuthenticationProvider()
{
OnValidateIdentity = async context =>
{
var userId = context.Identity.GetUserId(); //Just a simple extension method to get the ID using identity.FindFirst(x => x.Type == ClaimTypes.NameIdentifier) and account for possible NULLs
if (userId == null) return;
var cacheKey = "MyApplication_Claim_Roles_" + userId.ToString();
var cachedClaims = System.Web.HttpContext.Current.Cache[cacheKey] as IEnumerable<Claim>;
if (cachedClaims == null)
{
var securityService = DependencyResolver.Current.GetService<ISecurityService>(); //My own service to get the user's roles from the database
cachedClaims = securityService.GetRoles(context.Identity.Name).Select(role => new Claim(ClaimTypes.Role, role.RoleName));
System.Web.HttpContext.Current.Cache[cacheKey] = cachedClaims;
}
context.Identity.AddClaims(cachedClaims);
}
}
InformationsquelleAutor der Frage Nick Albrecht | 2013-10-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
OWIN cookie-Authentifizierung, middleware unterstützt keine session-caching gefällt mir " - Funktion noch nicht. #2 ist nicht eine der Optionen.
#3 ist der richtige Weg zu gehen. Als Prabu vorgeschlagen, sollten Sie im code Folgendes:
OnResponseSignIn:
OnValidateIdentity:
Ich würde Ihnen vorschlagen, gzip den Keks, aber ich fand, dass OWIN schon, dass es in seiner TicketSerializer. Nicht eine option für Sie.
InformationsquelleAutor der Antwort Hongye Sun
InformationsquelleAutor der Antwort Praburaj
Können Sie implementieren IAuthenticationSessionStore die Speicherung von cookies in der Datenbank.
Hier ein Beispiel für die Speicherung von Cookies in redis.
Schauen Sie sich die vollständige Beispiel hier
InformationsquelleAutor der Antwort Alex Nguyen