2015-10-20 57 views
5

Na Brock Allen's blog, stwierdza on, żeKorzystanie OnValidateIdentity do wykonywania dodatkowej weryfikacji danych ciasteczek

klasa CookieAuthenticationOptions ma właściwość Provider ... i ma właściwości, które są delegaci można subskrybować. Ten numer umożliwia sprawdzenie poprawności pliku cookie, ponieważ wchodzi on w skład aplikacji OnValidateIdentity. W tym oddzwonieniu możesz odrzucić lub zastąpić tożsamość .

Jestem nowy w OWIN i C#, więc staram się dostosować wiele przykładów OnValidateIdentity, które znalazłem online, aby spełnić moje potrzeby. Po cookie został przyjęty jako ważny na każdym „prywatny” strony, chciałbym, aby sprawdzić następujące rzeczy:

  1. Cookie zawiera co najmniej jedno roszczenie
  2. Wartość roszczenia CustomerId jest większa niż zero

Mogę osiągnąć te dwie kontrole w normalny sposób, ale nie mogę wymyślić, jak podłączyć logowanie do OnValidateIdentity. Oto, co mam do tej pory:

Napisałem trochę kodu, ale nie mogę określić, co należy zwrócić z zastosowanej metody.

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); 

} 

Odpowiedz

3

wierzę, że jest po prostu:

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

Jest pełny przykład tutaj, że osiąga coś podobnego do tego, co potrzebne: http://stackoverflow.com/questions/25780551/extending-cookieauthenticationprovider- Nieprawidłowa identyfikacja – EvilDr