6

UżywamJak powinienem obsługiwać uwierzytelnianie w Identity 2.0 i WebAPI 2.1 i Owin 2?

  • nowa przeglądarka wyłącznie klientom w tej samej domenie
  • Identity 2.0
  • WebAPI 2,1
  • Owin 2,1
  • angularjs front-end do rejestracji, logowania i wyświetlania danych

W aplikacji WebAPI z interfejsem AngularJS.

Piszę o uwierzytelnianiu tokena, ale jestem teraz bardzo zdezorientowany i nie mogę znaleźć żadnych dobrych przykładów, które wykorzystują moją kombinację. Chciałbym wiedzieć, że powinienem używać plików cookie lub tokenów do uwierzytelniania. Czy powinienem używać UserFactory lub CreatePerOwinContext?

Oto co mam w moich Startup.Auth.cs

public partial class Startup { 

     public void ConfigureAuth(IAppBuilder app) { 

      app.CreatePerOwinContext(ApplicationDbContext.Create); 
      app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 
      app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create); 
      app.UseCookieAuthentication(new CookieAuthenticationOptions { 
       AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
       LoginPath = new PathString("/"), 
       Provider = new CookieAuthenticationProvider { 
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
         validateInterval: TimeSpan.FromMinutes(30), 
         regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
       } 
      }); 
      app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 
      app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5)); 

      // Enables the application to remember the second login verification factor such as phone or email. 
      // Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from. 
      // This is similar to the RememberMe option when you log in. 
      app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie); 
     } 
    } 

WebAPI Oto mój config:

public static class WebApiConfig 
{ 
    public static void CustomizeConfig(HttpConfiguration config) 
    { 
     config.Formatters.Remove(config.Formatters.XmlFormatter); 
     var json = config.Formatters.JsonFormatter; 
     json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 
     json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; 
     json.SerializerSettings.Converters.Add(new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-ddTHH:mmZ" }); 
    } 

Widziałem kilka przykładów przy użyciu tego kodu, ale nie jestem pewien, w jaki sposób mogę zadzwonić to:

OAuthOptions = new OAuthAuthorizationServerOptions 
{ 
    TokenEndpointPath = new PathString("/Token"), 
    Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory), 
    AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"), 
    AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), 
    AllowInsecureHttp = true 
}; 

Czy mogę po prostu zastąpić uwierzytelnianie plików cookie tym?

Odpowiedz

2

Nie jestem ekspertem, ale w moich próbach stwierdziłem, że tokeny działają świetnie dla api i od javascript do api, a tradycyjne ciasteczka chudą głównie dla ui. Każda z nich lub obie będą działać w zależności od tego, co próbujesz zrobić.

Możesz śledzić coś w ten link, dokłada ciasteczko dla UI i Token dla API http://blog.iteedee.com/2014/03/asp-net-identity-2-0-cookie-token-authentication/

app.CreatePerOwinContext(ApplicationSession.Create); 
     app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 

     // Token Authentication 
     app.UseOAuthBearerAuthentication(new OAuthBearerOptions()); 

myślę, że można ustawić uwierzytelniania cookies typ uwierzytelniania opcje na okaziciela, jeśli chcesz okaziciela zarówno dla ale musiałbyś się z tym bawić. Token znajduje się w owinontext pod ".AspNet.ExternalBearer".

Wydaje mi się również, że jeśli zarejestrujesz oprogramowanie pośredniczące Identity 2.0, uważam, że rejestruje on również elementy oprogramowania pośredniego oauth, więc nie musisz samodzielnie rejestrować oprogramowania pośredniego oauthserver. Jest to opublikowany przez ciebie kod OAuthAuthorizationServerOptions. Nie potrzebujesz tego.

jeśli ui i api są oddzielne, to jest nieco trudniejsze, jeśli chcesz zrobić pojedyncze logowanie z interfejsu API do interfejsu API. Polecam przeglądanie serwera tożsamości lub serwera autoryzacji open source od thinktecture.

Jeśli twój zestaw na owinnym oprogramowaniu pośrednim i tożsamości 2.0, musisz upewnić się, że token może zostać odczytany zarówno przez aplikację, jak i api i prawdopodobnie będziesz musiał zaimplementować ISecureDataFormat. Pamiętaj jednak, że odszyfrowywanie nie oznacza, że ​​możesz w 100% ufać tokenowi, powinno to być podpisane i zweryfikowane. Zależy od twoich potrzeb.

Przepraszam, myślę, że to długa wędrówka ... Powodzenia.

Powiązane problemy