2014-04-09 8 views
5

मैं क्रम में हमारे केंद्रीय प्रमाणीकरण तंत्र का फिर से उपयोग में एक साथ एक कस्टम Owin प्रमाणीकरण मिडलवेयर डालने की प्रक्रिया में हूँ से खाते में जोड़कर देखते हैं।लें नियंत्रक एक Owin प्रमाणीकरण मिडलवेयर

पृष्ठों तक पहुंच को नियंत्रित करने के लिए, मैं [Authorize] और [AllowAnonymous] नियंत्रकों पर विशेषताओं का उपयोग कर रहा हूं।

हालांकि मैं समझता हूँ Owin मिडलवेयर और विशेषता पृष्ठ जीवन चक्र के बहुत विभिन्न चरणों में हैं, मैं अगर वहाँ मिडलवेयर कि AllowAnonymous विशेषता मौजूद है सूचित करने के लिए एक तरीका था सोच रहा था और करने के लिए कोई जरूरत नहीं है अनुरोध आगे की प्रक्रिया।

आमतौर पर, मिडलवेयर प्रमाणीकरण प्रक्रिया को ट्रिगर करते हैं (मेरे मामले में, रिमोट पेज पर जाने का अर्थ - OAuth2 प्रमाणीकरण के प्रकार) एक साइट के प्रवेश पृष्ठ तक पहुंचने पर एक समस्या होगी जो गुमनाम रूप से सुलभ होने वाली है ।

किसी को भी है कि पूरा करने के लिए एक तरह से पता है?

उत्तर

3

मुझे पता है कि यह वास्तव में पुराना है, लेकिन मैं एक ही मुद्दा था। यदि आपको पहले से ही जवाब नहीं मिला है, लेकिन यह देखने में भी मदद करने वाले अन्य लोगों की मदद करने के लिए:

मिडलवेयर के बारे में याद रखने की बात यह है कि नियंत्रक इसे प्राप्त करने से पहले अनुरोध को संभालने के लिए आपको अनुरोध संभालना पड़ता है। तो, आप आप सिर्फ उनके परिणामों के लिए देखने की जरूरत है, सीधे गुण का उपयोग करने की जरूरत नहीं है।

namespace CustomAuthApp.MVC 
{ 
    public partial class Startup 
    { 
     public void ConfigureAuth(IAppBuilder app) 
     { 
      app.Use(async (ctx, next) => 
      { 
       if (ctx.ExtensionMethodToCheckIfAccessTokenExistsInRequestMaybeAsACookie()) 
       { 
        var ident = new ClaimsIdentity("External"); 
        ctx.Request.User = new ClaimsPrincipal(ident); 
       } 

       await next(); 

       if (ctx.Response.StatusCode == 401) 
       { 
        var loginUri = String.Format("{0}?ReturnUrl={1}", "/Account/Login", ctx.Request.Path); 
        ctx.Response.Redirect(loginUri); 
       } 
      } 
     }); 
    } 
} 

हम जांच करने के लिए मिलता है OAuth सेवा से पहुंच टोकन मौजूद है और यदि ऐसा है तो, अनुरोध पर ClaimsPrincipal सेट (जो कर देगा यह [Authorized] विशेषता बाईपास):

निम्नलिखित पर विचार करें। तब के बाद अनुरोध await next() द्वारा नियंत्रित किया जाता हम प्रतिसाद स्थिति और सेट जो कुछ भी रीडायरेक्ट आवश्यक हैं देख सकते हैं।

जाहिर है, यह एक बेहद सरल मामला है और भूमिकाओं या दावों जैसे चीजों को ध्यान में नहीं लेता है, लेकिन यह आपको सड़क से नीचे ले जाना चाहिए।

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