6

Я используюКак мне обрабатывать аутентификацию с помощью Identity 2.0 и WebAPI 2.1 и Owin 2?

  • Новый браузер только клиентов на том же домене
  • Идентичность 2,0
  • WebAPI 2,1
  • Owin 2,1
  • AngularJS фронт-енд для регистрации, авторизации и отображения данных

В приложении WebAPI с интерфейсом AngularJS.

Я читаю об аутентификации токенов, но сейчас я очень смущен, и я не могу найти никаких хороших примеров, которые используют мою комбинацию. Я хотел бы знать, должен ли я использовать файлы cookie или токены для аутентификации. Должен ли я использовать Userfactory или CreatePerOwinContext?

Вот что у меня есть в моем 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 конфигурация:

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

Я видел несколько примеров, с помощью этого кода, но я не знаю, как я могу позвонить это:

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

Могу я просто заменить аутентификацию cookie этим?

ответ

2

Не эксперт, но в моей работе я обнаружил, что токены отлично работают для api и от javascript до api, а традиционные cookie ориентируются в основном на ui. Любой или оба будут работать в зависимости от того, что вы пытаетесь сделать.

Вы можете следить за что-то вроде этой ссылке, которая делает печенье для пользовательского интерфейса и маркер для апи 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()); 

Я думаю, что вы можете установить аутентификации печенья тип аутентификации опции на предъявителя, если вы хотите предъявителя для обоих, но вам придется играть с ним. Токен будет в owincontext в разделе «.AspNet.ExternalBearer».

Я также думаю, что если вы зарегистрируете промежуточное программное обеспечение Identity 2.0, я думаю, что он также регистрирует материал промежуточного программного обеспечения oauth, поэтому вам не нужно самостоятельно регистрировать промежуточное программное обеспечение oauthserver. Это код OAuthAuthorizationServerOptions, который вы опубликовали. Тебе это не нужно.

Если ui и api находятся в отдельном, то это немного сложнее, если вы хотите сделать какой-то один знак из прохода ui в api. Я бы рекомендовал посмотреть сервер идентификации или сервера авторизации с открытым исходным кодом от thinktecture.

Если ваш набор на промежуточном программном обеспечении owin и Identity 2.0 вам необходимо убедиться, что токен может быть прочитан как приложением, так и api, и вам, вероятно, потребуется реализовать ISecureDataFormat. Но помните, что дешифрование не означает, что вы можете на 100% доверять токену, он должен быть подписан и проверен. Зависит от ваших потребностей.

Извините, я думаю, это длинный ход ... Удачи.