2015-12-23 10 views
9

में कुकीज़ प्रमाणीकरण का उपयोग करके प्राधिकृत करें [प्राधिकरण] विशेषता का परीक्षण कर रहा हूं, लेकिन अगर उपयोगकर्ता ने अभी तक लॉग इन नहीं किया है एक 401 देता है)।एएसपी.NET 5

यह मेरा कोड है जो मेरे नियंत्रक (बहुत सरल) में लॉगिन करने के लिए है।

app.UseCookieAuthentication(options => 
    { 
     options.AutomaticAuthenticate = true; 
     options.LoginPath = new PathString("/Account/Login"); 
    }); 

कोई भी विचार:

if (model.UserName == "admin" && model.Password == "test") 
{ 
    var claims = new[] { new Claim("name", model.UserName), new Claim(ClaimTypes.Role, "Admin") }; 
    var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); 
    await HttpContext.Authentication.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity)); 
    return RedirectToAction("Index", "Home"); 
} 

और इस लॉगिन के लिए Startup.cs में मेरे विन्यास है?

धन्यवाद !!

+0

आप हमें प्रदान कर सकते हैं अपने 'Startup.cs' के साथ ही नियंत्रक आप सुरक्षित करने के लिए कोशिश कर रहे हैं? ऐसा लगता है कि यह आपके 'ऐप' में से एक हो सकता है। उपयोग करें ..() 'जो गलत क्रम में हो सकता है। –

उत्तर

7

आपका Startup.cs ऐसा दिखाई देगा:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    LoginPath = "/account/login", 

    AuthenticationScheme = "Cookies", 
    AutomaticAuthenticate = true, 
    AutomaticChallenge = true 
}); 

ऑटो सेट करना maticChallenge यह है कि [अधिकृत] विशेषता काम करने जा रहा है। किसी भी नियंत्रक पर [अधिकृत] विशेषता शामिल करना सुनिश्चित करें, जिसे आप रीडायरेक्ट (302) होने के लिए चाहते हैं।

इस GitHub रेपो में एक बहुत ही बुनियादी नमूना है कि कुछ मार्गदर्शन प्रदान सकता है: https://github.com/leastprivilege/AspNet5TemplateCookieAuthentication

+1

वास्तव में योजना संपत्ति "काम को अधिकृत करने" नहीं देती है। यह फ़िल्टरिंग को सक्षम करने के लिए है, और आपको मैन्युअल रूप से ऑथ करने में सक्षम बनाता है। यह बस एक लेबल है। स्वचालित चैलेंज रीडायरेक्ट टुकड़ों को काम करने का कारण बनता है। – blowdart

+0

@blowdart सहमत, मेरा मतलब था, और डिफ़ॉल्ट मानों के कारण इसकी आवश्यकता नहीं हो सकती है, यह है कि [प्राधिकरण] द्वारा डिफ़ॉल्ट रूप से लागू प्राधिकरण योजना/नीति "कुकीज़" है इसलिए रीडायरेक्ट कस्टम योजना के लिए काम नहीं करेगा एक diff नाम के साथ। मैंने इस परिदृश्य के लिए उस भाग को हटा दिया है, यह प्रासंगिक नहीं है। धन्यवाद! –

+1

प्राधिकरण सभी पंजीकृत प्रमाणीकरण मिडलवेयर के माध्यम से जाएगा, जिनकी स्वचालित प्रमाणीकरण संपत्ति सत्य है/कोई डिफ़ॉल्ट नहीं है। कुकी मिडलवेयर डिफ़ॉल्ट रूप से उस संपत्ति को सही पर सेट करता है। – blowdart

1

Startup.cs में इस प्रयास करें: नियंत्रक में

app.UseCookieAuthentication(options => 
{ 
    options.AuthenticationType = CookieAuthenticationDefaults.AuthenticationScheme; 
    options.AutomaticAuthenticate = true; 
    options.AutomaticChallenge = true; 
    options.LoginPath = new PathString("/Account/Login"); 
}); 

और यह

IAuthenticationManager authManager = Request.GetOwinContext().Authentication; 
authManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity); 
+0

आप अनुपलब्ध हैं स्वचालितChallenge = true – blowdart

+0

आप सही हैं! धन्यवाद –

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