2015-10-20 5 views
5

Auf Brock Allen's blog auszuführen, stellt er fest, dassOnValidateIdentity Mit einer zusätzlichen Validierung von Daten Cookie

die CookieAuthenticationOptions Klasse eine Provider-Eigenschaft hat ... und es Eigenschaften hat, die Delegierten Sie abonnieren können. Mit dieser können Sie das Cookie validieren, wie es in der Anwendung (OnValidateIdentity) kommt. In diesem Rückruf können Sie die Identität ablehnen oder ersetzen.

Ich bin neu in OWIN und C#, so habe Schwierigkeiten, die viele Beispiele von OnValidateIdentity anzupassen, die ich online gefunden habe meine Bedürfnisse anzupassen. Nachdem das Cookie als gültig an jeder ‚privaten‘ Webseite akzeptiert, würde Ich mag für folgende Dinge überprüfen:

  1. Das Cookie enthält mindestens ein Anspruch
  2. Der Wert CustomerId Anspruchs größer als Null

ich kann diese beiden Schecks in einem normalen Verfahren erreichen, aber ich kann nicht herausfinden, wie das Login in OnValidateIdentity einzuhaken. Hier ist, was ich bisher habe:

Ich habe etwas Code geschrieben, kann aber nicht herausfinden, was von der verwendeten Methode zurückgegeben werden muss.

public void Configuration(IAppBuilder app) 
{ 
    dynamic cookieExpirationPeriod = TimeSpan.FromMinutes(60); 

    CookieAuthenticationProvider prov = new CookieAuthenticationProvider(); 
    prov.OnValidateIdentity = ctx => 
    { 
     MyClaimsIdentityObject si = MyApp.Identity.Current(); 
     if (si == null || si.UserId == 0 || si.CustomerId == 0) { 
      ctx.RejectIdentity(); 
      // what needs to happen here for a return value? 
     } 
    }; 


    CookieAuthenticationOptions coa = new CookieAuthenticationOptions { 
     AuthenticationMode = AuthenticationMode.Active, 
     CookieName = "MyApp", 
     ExpireTimeSpan = cookieExpirationPeriod, 
     SlidingExpiration = true, 
     AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
     LoginPath = new PathString("/login.aspx"), 
     CookieHttpOnly = true, 
     Provider = prov 
    }; 

    if (HttpContext.Current.Request.IsLocal) { 
     coa.CookieSecure = CookieSecureOption.Never; 
    } else { 
     coa.CookieSecure = CookieSecureOption.Always; 
    } 

    app.UseCookieAuthentication(coa); 

} 

Antwort

3

Ich glaube, das ist nur:

return Task.FromResult<int>(0); 
+0

Es gibt ein vollständiges Beispiel hier, die eine ähnliche Sache erreicht, was ich brauchte: http://stackoverflow.com/questions/25780551/extending-cookieauthenticationprovider- onvalidatenidentität – EvilDr