2015-01-25 23 views
8

Tôi có hai dự án chính trong ứng dụng Web của tôi:WebAPI owin sử dụng thẻ và cookie

  1. dự án WebAPI như back-end để phục vụ xác thực và ủy quyền cho các dự án Web, sử dụng OWIN 2 với thẻ ghi tên.
  2. Dự án web sử dụng Angularjs.

Dự án Web hoạt động như mong đợi (xác thực và ủy quyền đang làm việc)

Phương pháp: cửa hàng thẻ để LocalStorage, và gửi nó sử dụng hệ thống đánh chặn mỗi yêu cầu.

Bây giờ tôi muốn thêm xác thực và ủy quyền cho dự án WebApi, sẽ phục vụ các mô-đun khác như Hangfire, Elmah và các trang trợ giúp. Tôi đã thêm cùng một logic đăng nhập, hoạt động (Cấp phép) và sau đó chuyển hướng đến trang Bảng điều khiển (sử dụng Angularjs) hoạt động.

Nhưng đi đến bất kỳ trang khác (một trong những module đề cập) không work.By không làm việc:. Người dùng từ bối cảnh Owin luôn null/trống (xem code)

Đối với sự hiểu biết của tôi, tôi cần bằng cách nào đó để gửi mã thông báo với mỗi yêu cầu không xảy ra ở đây.

Câu hỏi:

  1. Làm thế nào tôi có thể đạt được điều đó (gửi/nhận được token)?

    Nếu cookie là chỉ/tiếp cận tốt hơn ↴

  2. Làm thế nào tôi có thể tích hợp cookie cho dự án 1 và Token cho dự án 2? (Cố gắng sử dụng các tập tin cookie, nhưng có vẻ như tôi đang làm sai, hoặc làm nó hoạt động đồng thời với thẻ bearer)

Mã:

public void Configuration(IAppBuilder app) 
{ 
    HttpConfiguration config = new HttpConfiguration(); 

    OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() 
    { 

     AllowInsecureHttp = true, 
     TokenEndpointPath = new PathString("/token"), 
     AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30), 
     Provider = new SimpleAuthorizationServerProvider(), 
     RefreshTokenProvider = new SimpleRefreshTokenProvider() 
    }; 

    app.UseOAuthAuthorizationServer(OAuthServerOptions); 
    app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 

    GlobalConfiguration.Configure(WebApiConfig.Register); 
    app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 
    app.UseWebApi(config); 

    AreaRegistration.RegisterAllAreas(); 

    app.UseHangfire(hangfireConfig => 
    { 
     config.UseAuthorizationFilters(
      new AuthorizationFilter { Users = "admin, superuser", Roles = "advanced" }, 
      new ClaimsBasedAuthorizationFilter("name", "value") 
     ); 

     hangfireConfig.UseSqlServerStorage("Context"); 
     hangfireConfig.UseServer(); 
    }); 
} 

tôi đã cố gắng cho mục đích thử nghiệm:

public class HFAuthorizationFilter : Hangfire.Dashboard.IAuthorizationFilter 
{ 
    public bool Authorize(IDictionary<string, object> owinEnvironment) 
    { 
     var context = new OwinContext(owinEnvironment); 

     if (context.Authentication.User == null) 
      return false;//Always null 

     return context.Authentication.User.HasClaim(ClaimTypes.Role, "SuperAdmin") 
      || context.Authentication.User.HasClaim(ClaimTypes.Role, "Admin"); 
    } 
} 

và Cấu hình:

app.UseHangfire(hangfireConfig => 
{ 
    hangfireConfig.UseAuthorizationFilters(
     new HFAuthorizationFilter() 
    ); 

    hangfireConfig.UseSqlServerStorage("Context"); 
    hangfireConfig.UseServer(); 
}); 

tiềm năng trùng lặp: Passing and verifying the OWIN Bearer token in Query String in WebAPI

Trả lời

0

nếu tôi hiểu đúng, bạn đang tìm kiếm để thực hiện hệ mã thông báo trong một api và sử dụng các dấu hiệu tương tự ở api khác. nếu đó là trường hợp thì bạn cần api chủ để được các máy phát điện mã thông báo và con hoặc phụ thuộc api để tiêu thụ các mã thông báo. Xin vui lòng tìm thầy và API con cấu hình cho oauth Thạc sĩ API cấu hình: API cấu hình

public void ConfigureOAuth(IAppBuilder app) 
     { 
      //configure OAuth using owin framework 
      var oAuthOptions = new OAuthAuthorizationServerOptions() 
      { 
       AllowInsecureHttp = true, 
       TokenEndpointPath = new PathString("/api/token"), 
       AccessTokenExpireTimeSpan = TimeSpan.FromHours(2), 
       Provider = new KatanaAuthorizationServerProvider() 

      }; 
      app.UseOAuthAuthorizationServer(oAuthOptions); 
      app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 
     } 

Child:

public void ConfigureAuth(IAppBuilder app) 
     { 
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 
     } 
+0

Đó là cũ, nhưng tôi không nghĩ rằng bạn hiểu một cách chính xác. Có một số yêu cầu mà tôi không khởi tạo hoặc không thể kiểm soát nhưng tôi cần có thể chuyển mã thông báo. –

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