6

Sto usandoCome devo gestire l'autenticazione con Identity 2.0 e WebAPI 2.1 e Owin 2?

  • nuovo browser solo i client sullo stesso dominio
  • Identity 2.0
  • WebAPI 2.1
  • Owin 2.1
  • AngularJS front-end per la registrazione, il login e visualizzare i dati

In un'applicazione WebAPI con un front-end AngularJS.

Sto leggendo sull'autenticazione token ma ora sono molto confuso e non riesco a trovare nessun buon esempio là fuori che usi la mia combinazione. Quello che vorrei sapere è che dovrei usare cookie o token per l'autenticazione. Dovrei usare Userfactory o CreatePerOwinContext?

Ecco quello che ho tra le 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); 
     } 
    } 

Ecco la mia WebAPI 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" }); 
    } 

Ho visto alcuni esempi di utilizzare questo codice, ma non sono sicuro come posso chiamare questo:

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

Posso semplicemente sostituire l'autenticazione dei cookie con questo?

risposta

2

Non un esperto, ma nel mio dilettarsi ho trovato che i token funzionano alla grande per API e da javascript in api, e i cookie tradizionali tendono principalmente per un interfaccia utente. Entrambi o entrambi funzioneranno a seconda di ciò che stai cercando di fare.

Puoi seguire qualcosa di simile a questo link che fa biscotto per l'interfaccia utente e il token per l'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()); 

Penso che si può impostare il cookie di autenticazione tipo di autenticazione opzioni al portatore, se si desidera portatore per entrambi, ma dovresti giocarci. Il token si trova nel owincontext sotto ".AspNet.ExternalBearer".

Penso anche che se si registra il middleware di Identity 2.0, penso che registri anche il roba middleware di oauth, quindi non è necessario registrare da sé il middleware di oauthserver. Questo è il codice OAuthAuthorizationServerOptions che hai pubblicato. Non ne hai bisogno.

se l'ui e l'api sono separati, è un po 'più difficile se si desidera eseguire una sorta di accesso singolo dall'interfaccia utente all'api. Consiglierei di guardare il server di identità opensource o il server di autorizzazione da thinktecture.

Se il set su owin middleware e Identity 2.0 è necessario assicurarsi che il token possa essere letto sia dall'applicazione che dall'api e probabilmente sarà necessario implementare ISecureDataFormat. Ma ricorda, la decrittografia non significa che puoi fidarti al 100% di un token, ma deve essere firmato e verificato. Dipende dalle tue esigenze

Scusa, immagino che sia un lungo viaggio ... Buona fortuna.