OWIN

2017-01-11 13 views
5

का उपयोग कर क्षेत्र आधारित प्रमाणीकरण मैं एक एमवीसी 5 वेब अनुप्रयोग विकसित कर रहा हूं। इस एप्लिकेशन में 2 क्षेत्र, 'एसयू' और 'ऐप' हैं। प्रत्येक क्षेत्र को स्वतंत्र रूप से प्रमाणित किया जाना चाहिए। प्रत्येक क्षेत्र में भी अपना लॉगिन पेज होता है।
मैं उपयोगकर्ताओं को प्रमाणीकृत करने के लिए OWIN का उपयोग कर रहा हूं।
अब मुद्दा यह है कि, मैं उपयोगकर्ता के अनुरोध के क्षेत्र के आधार पर owin CookieAuthenticationOptionsLoginPath सेट करने में असमर्थ हूं।
उदाहरण के लिए, यदि उपयोगकर्ता अनुरोध http://example.com/su/reports/dashboard, मैं उन्हें 'ऐप्स' क्षेत्र के लिए, इसी तरह http://example.com/su/auth/login
पर रीडायरेक्ट करने में सक्षम होना चाहिए, यदि उपयोगकर्ता अनुरोध http://example.com/app/history/dashboard, मैं उन्हें http://example.com/app/auth/loginOWIN

पर रीडायरेक्ट करने में सक्षम होना चाहिए मैं चाहूँगा कस्टम विशेषता से बचने के लिए और इसलिए कोड निम्नलिखित की कोशिश की लेकिन यह हमेशा रूट लॉगिन पथ यानी के लिए पुनः निर्देशित किया जाता है, http://example.com/auth/login

public partial class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      var url = HttpContext.Current.Request.Url.AbsoluteUri; 
      string loginPath = "/auth/login"; 
      string areaName = string.Empty; 
      if (url.ToLower().Contains("/su/")) 
      { 
       areaName = "SU"; 
       loginPath = "/su/auth/login"; 
      } 
      if (url.ToLower().Contains("/app/")) 
      { 
       areaName = "APP"; 
       loginPath = "/app/auth/login"; 
      } 
      app.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       AuthenticationType = "ApplicationCookie" + areaName, 
       LoginPath = new PathString(loginPath) 
      }); 
     } 
} 

मैं सही दृष्टिकोण अनुसरण कर रही हूं या वहाँ एक ही प्राप्त करने के लिए किसी भी अन्य तरीका है? धन्यवाद!

उत्तर

2

CookieAuthenticationOptions.LoginPath संपत्ति स्टार्टअप पर एक बार सेट की जाती है। अनुरोध के आधार पर विभिन्न यूआरएल का उपयोग करने के लिए, आप ICookieAuthenticationProvider के कस्टम कार्यान्वयन का उपयोग CookieAuthenticationOptions.Provider के माध्यम से सेट कर सकते हैं या CookieAuthenticationProvider में OnApplyRedirect के लिए अपनी कस्टम कार्रवाई सेट कर सकते हैं। दूसरा विकल्प सरल है और आपके मामले के लिए पर्याप्त लगता है।

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = "ApplicationCookie", 
    LoginPath = new PathString("/auth/login"), 
    Provider = new CookieAuthenticationProvider { OnApplyRedirect = OnApplyRedirect } 
}); 

public static void OnApplyRedirect(CookieApplyRedirectContext context) 
{ 
    var url = HttpContext.Current.Request.Url.AbsoluteUri; 

    string redirectUrl = "/auth/login"; 
    if (url.ToLower().Contains("/su/")) 
    { 
     redirectUrl = "/su/auth/login"; 
    } 
    else if (url.ToLower().Contains("/app/")) 
    { 
     redirectUrl = "/app/auth/login"; 
    } 

    context.Response.Redirect(redirectUrl); 
} 
:

यहाँ एक नमूना कोड है

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