6

Tôi đang sử dụngTôi nên xử lý xác thực bằng Identity 2.0 và WebAPI 2.1 và Owin 2 bằng cách nào?

  • trình duyệt mới chỉ khách hàng trên cùng một tên miền
  • nhận dạng 2.0
  • WebAPI 2.1
  • Owin 2.1
  • AngularJS front-end cho đăng ký, đăng nhập và hiển thị dữ liệu

Trong ứng dụng WebAPI có giao diện người dùng AngularJS.

Tôi đang đọc về xác thực mã thông báo nhưng bây giờ tôi rất bối rối và tôi không thể tìm thấy bất kỳ ví dụ hay nào ngoài đó sử dụng kết hợp của tôi. Những gì tôi muốn biết là tôi nên sử dụng cookie hoặc thẻ để xác thực. Tôi có nên sử dụng Userfactory hoặc CreatePerOwinContext không?

Đây là những gì tôi có trong Startup.Auth.cs tôi

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

Dưới đây là cấu hình WebAPI tôi:

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

tôi thấy một số ví dụ sử dụng mã này, nhưng tôi không chắc chắn làm thế nào tôi có thể gọi này:

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

Tôi có thể thay thế xác thực cookie bằng cách này không?

Trả lời

2

Không phải là một chuyên gia, nhưng trong dabbling của tôi tôi đã tìm thấy rằng thẻ làm việc tuyệt vời cho api và từ javascript để api, và cookie truyền thống nạc chủ yếu cho một ui. Một trong hai hoặc cả hai sẽ hoạt động tùy thuộc vào những gì bạn đang cố gắng làm.

Bạn có thể làm theo một cái gì đó giống như liên kết này mà không cookie cho các ui và Token cho 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()); 

Tôi nghĩ rằng bạn có thể thiết lập xác thực Cookie loại tùy chọn xác thực vô danh nếu bạn muốn vô danh cho cả hai, nhưng bạn sẽ phải chơi với nó. Mã thông báo sẽ nằm trong owincontext trong ".AspNet.ExternalBearer".

Tôi cũng nghĩ rằng nếu bạn đăng ký phần mềm trung gian Identity 2.0, tôi nghĩ rằng nó cũng đăng ký công cụ phần mềm trung gian oauth, do đó bạn không cần tự đăng ký phần mềm trung gian oauthserver. Đó là mã OAuthAuthorizationServerOptions bạn đã đăng. Bạn không cần nó.

nếu ui và api nằm riêng biệt thì hơi khó hơn một chút nếu bạn muốn thực hiện một số loại dấu hiệu đơn lẻ từ thẻ ui truyền tới api. Tôi khuyên bạn nên xem xét máy chủ nhận dạng opensource hoặc máy chủ ủy quyền từ thinktecture.

Nếu thiết lập của bạn trên phần mềm trung gian và Identity 2.0, bạn cần đảm bảo mã thông báo có thể được đọc bởi cả ứng dụng và api và có thể bạn sẽ cần triển khai ISecureDataFormat. Nhưng hãy nhớ, giải mã không có nghĩa là bạn có thể tin cậy 100% mã thông báo, nó phải được ký và xác minh. Phụ thuộc vào nhu cầu của bạn.

Xin lỗi, tôi đoán đó là một con đường dài ... Chúc may mắn.

Các vấn đề liên quan