2015-01-25 9 views
8

मैं अपने वेब अनुप्रयोग में दो मुख्य परियोजनाओं:WebAPI Owin का उपयोग टोकन और कुकी

  1. WebAPI परियोजना के रूप में बैक-एंड वेब परियोजना, वाहक टोकन के साथ Owin 2 उपयोग करने के लिए प्रमाणीकरण और प्राधिकरण की सेवा के लिए।
  2. वेब प्रोजेक्ट Angularjs का उपयोग करता है।

वेब परियोजना में काम करता है के रूप में की उम्मीद (प्रमाणीकरण और प्राधिकरण काम कर रहे हैं)

विधि: LocalStorage को दुकान के लिए टोकन और इंटरसेप्टर प्रत्येक अनुरोध का उपयोग कर भेजें।

अब मैं वेबएपीआई प्रोजेक्ट को प्रमाणीकरण और प्रमाणीकरण जोड़ना चाहता हूं, जो हैंगफायर, एल्मा और हेल्प पेज जैसे अन्य मॉड्यूल की सेवा करेगा। मैंने एक ही लॉगिन तर्क जोड़ा, जो काम करता है (अधिकृत) और फिर डैशबोर्ड पेज (Angularjs का उपयोग करके) पर रीडायरेक्ट करता है जो काम करता है।

लेकिन किसी अन्य पेज (उल्लेख किया मॉड्यूल में से एक) के लिए जा रहा नहीं काम कर रहा work.By नहीं है:। Owin संदर्भ हमेशा अशक्त/खाली से उपयोगकर्ता (कोड देखें)

मेरी समझ के लिए, मैं प्रत्येक अनुरोध के साथ टोकन भेजने के लिए किसी भी तरह की आवश्यकता है जो यहां नहीं होता है।

सवाल:

  1. मैं कैसे प्राप्त कर सकते हैं कि (भेजने/टोकन हो रही)?

    तो कुकी केवल/बेहतर दृष्टिकोण ↴

  2. मैं कैसे परियोजना 1 के लिए कुकी को एकीकृत करने और परियोजना 2 के लिए टोकन सकता है? (कुकीज़ का उपयोग करने की कोशिश की है, लेकिन यह मैं गलत कर रहा हूँ यह लगता है, या क्या करता है यह वाहक टोकन के साथ एक साथ काम करते हैं)

कोड:?

01:

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

मैं परीक्षण प्रयोजनों के लिए करने की कोशिश की

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

और विन्यास में:

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

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

संभावित डुप्लिकेट: Passing and verifying the OWIN Bearer token in Query String in WebAPI

उत्तर

0

अगर मैं सही ढंग से समझ में आया, आप एक एपीआई में टोकन पीढ़ी को लागू करने और अन्य एपीआई में एक ही टोकन का उपयोग कर रहे हैं। यदि ऐसा है तो टोकन का उपभोग करने के लिए टोकन जेनरेटर और बच्चे या आश्रित एपीआई होने के लिए आपको मास्टर एपीआई की आवश्यकता है। कृपया OAuth मास्टर एपीआई config के लिए मास्टर और बच्चे एपीआई config:

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

बाल एपीआई config:

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

यह पुराने है, लेकिन मुझे नहीं लगता कि आप सही तरीके से समझा। कुछ अनुरोध हैं जिन्हें मैं शुरू नहीं करता या नियंत्रित नहीं कर सकता लेकिन मुझे टोकन पास करने में सक्षम होना चाहिए। –

संबंधित मुद्दे