2015-03-11 13 views
27

को हटाने के लिए प्रतीत नहीं होता है मुझे ओविन कुकी प्रमाणीकरण के साथ कुछ समस्याएं हैं। मेरे पास एक .Net साइट है जिसमें कुछ एमवीसी पेज हैं जो एक भालू टोकन द्वारा संरक्षित कुकी प्रमाणीकरण और वेबएपीआई संसाधनों का उपयोग करते हैं।ओविन - प्रमाणीकरण। साइनऑट() कुकी

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

इसी तरह, मैं एमवीसी पृष्ठों द्वारा उपयोग की जाने वाली कुकी को हटाने के लिए लॉग आउट भी पसंद करूंगा।

[Route("Logout")] 
    public IHttpActionResult Logout() 
    { 
     var ctx = Request.GetOwinContext(); 
     var authenticationManager = ctx.Authentication; 
     authenticationManager.SignOut(); 
     return Ok(); 
    } 

हालांकि, बुला लॉगआउट के बाद, मैं अभी भी भले ही कुकी माना जाता है कि लॉगआउट कॉल द्वारा हटा दिया गया है | संरक्षित MVC पृष्ठ पर जा सकते हैं: मैं सर्वर पर निम्न किया था।

यह बहुत आसान लगता है, इसलिए मुझे कुछ याद आ गया होगा।

धन्यवाद,

उत्तर

-1

मैं इस काम मिल गया। यहां मैंने जो किया है:

जब मैंने ऊपर लॉगआउट कार्रवाई कहा, तो मैंने फिडलर का उपयोग किया क्योंकि मैं अभी भी लॉगआउट सुविधा का परीक्षण कर रहा था। मैंने अंदर एक ब्रेकपॉइंट लगाया और हां विधि सफलतापूर्वक लागू की गई है। यह प्रमाणीकरण प्रबंधक है। साइनऑट() हालांकि मेरा संरक्षित पृष्ठ अभी भी काम करता है।

तो फ़िडलर उपयोग करने के बजाय, मैं ग्राहक पर कोड रखने का फैसला किया है:

var token = sessionStorage.getItem(tokenKey); 
    var headers = {}; 
    if (token) { 
     headers.Authorization = 'Bearer ' + token; 
    } 

    $.ajax({ 
     type: 'POST', 
     url: '/api/Account/Logout', 
     headers: headers 
    }).done(function (data) { 
     self.result("Logout Done!"); 
    }).fail(showError); 

वायर्ड एक प्रस्थान करें बटन, और देखा यह कोड! संरक्षित एमवीसी पृष्ठ अब लॉगआउट बटन पर क्लिक करने के बाद अपेक्षित 401 अनधिकृत त्रुटि के साथ आता है। हमेशा की तरह, वेबएपीआई संसाधन भी अपेक्षित 401 त्रुटि के साथ आता है।

यह सब के बाद काम कर रहा है, मुझे लगता है कि परीक्षण के लिए फिडलर का उपयोग करने की प्रक्रिया किसी भी तरह से समस्या का कारण बनती है। हालांकि मैं यह समझा नहीं सकता कि यह मामला क्यों है।

पढ़ने के लिए धन्यवाद।

36

मुझे पिछले कुछ दिनों के लिए एक ही समस्या थी।

Request.GetOwinContext().Authentication.SignOut(); 

Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie); 

HttpContext.Current.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie); 

इस लेख बताता है कि क्यों आपकी कुकी हटाने के नहीं मिलता:

Request.GetOwinContext().Authentication.authenticationManager.SignOut(); 

इन का प्रयोग एक (और केवल एक) के बजाय http://dotnet.dzone.com/articles/catching-systemwebowin-cookie

मुझे पता है मेरा उत्तर नहीं है सबसे अधिक शोध-आधारित, लेकिन आपको सत्य बताने के लिए, मुझे नहीं पता था कि मेरे प्रदत्त कोड उदाहरण मेरे लिए क्यों काम करते हैं। मुझे बस पता है कि System.Web Owins कुकीज़ को गड़बड़ कर देता है यदि आप SignOut() को किसी अन्य तरीके से करते हैं।

+1

धन्यवाद! 'Microsoft.AspNet.Identity.DefaultAuthenticationTypes.AplicationCookie 'को' साइनऑट 'पर पास करने के लिए मेरे लिए काम किया। हम 'Global_asax.cs' –

3

अन्य विकल्प मेरे लिए काम नहीं करते थे, हालांकि, मैं निम्नलिखित कार्य करके इस समस्या को हल करने में सक्षम था।

Startup.cs में दायर आप सेट कर सकते हैं कि कैसे कुकी संग्रहीत किया जाता है:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = "ExternalCookie", 
    AuthenticationMode = AuthenticationMode.Passive, 
    CookieName = ".AspNet.SomeName", 
    ExpireTimeSpan = TimeSpan.FromMinutes(5) 
}); 

आप उपरोक्त कोड उदाहरण मैं ".AspNet.SomeName" करने के लिए कुकी नाम सेट में देख सकते हैं।

अब आप यह बस विगत तिथि करने के लिए है कि कुकीज़ समाप्ति की स्थापना द्वारा नष्ट कर सकते हैं:

if (HttpContext.Current.Request.Cookies[".AspNet.SomeName"] != null) 
{ 
    HttpCookie myCookie = new HttpCookie(".AspNet.SomeName"); 
    myCookie.Expires = DateTime.Now.AddYears(-1); 
    HttpContext.Current.Response.Cookies.Add(myCookie); 
} 
+0

में 'सत्र_स्टार्ट()' के भीतर से लोगों पर हस्ताक्षर कर रहे थे, लेकिन "एएसपीनेट.ओमनाम" कुकी एक HTTP केवल कुकी है? यदि नहीं, तो यहां एक सुरक्षा समस्या है। प्रमाणीकरण कुकी का उपयोग करना जो क्लाइंट –

+0

से सुलभ है, यह केवल कुकी के उपयोगकर्ता के ब्राउज़र से प्रतिक्रिया से हटा देता है। यह उनके आवेदन सत्र को समाप्त नहीं करता है। यह भ्रम हो सकता है कि यह इसलिए है क्योंकि उपयोगकर्ता चले गए हैं, क्योंकि उपयोगकर्ता अब और लॉग इन नहीं होगा। लेकिन अगर किसी और ने उस कुकी को पूर्णतया या प्राप्त किया था, तो भी वे इसका उपयोग कर सक्रिय सत्र को हाइजैक कर सकते हैं ... आपको सत्र समाप्त करने के लिए प्रमाणीकरण प्रबंधक। साइनऑट() सर्वर पक्ष को कॉल करने की आवश्यकता है - इसके चारों ओर कोई रास्ता नहीं। – Breeno

2

यह मेरे लिए काम किया। जब आप कुकी को अमान्य करना चाहते हैं तो उसे नियंत्रक में फेंक दें। विशेष रूप से, मैंने उपयोगकर्ता की भूमिकाओं को अद्यतन करने के लिए इसका उपयोग किया ताकि उपयोगकर्ता को @if(User.IsInRole("Admin")){...} के तहत लोड होने वाले मेनू को ठीक करने के लिए मैन्युअल रूप से लॉग आउट और फिर से वापस नहीं करना पड़े। मुझे उम्मीद है कि यह किसी की मदद करेगा - इसे समझने में मुझे कुछ समय लगा।

var updatedUser = await UserManager.FindByNameAsync(User.Identity.Name); 
    var newIdentity = await updatedUser.GenerateUserIdentityAsync(UserManager); 
    AuthenticationManager.SignOut(); 
    AuthenticationManager.SignIn(newIdentity); 
0

मैंने उपर्युक्त समाधान का पालन किया लेकिन मैं अंत में उलझन में था क्योंकि उपयोगकर्ता लॉग इन नहीं हुआ था। अंत में मेरी समस्या से हल:

Request.GetOwinContext().Authentication.SignOut(DefaultAuthenticationTypes.ApplicationCookie); 
FederatedAuthentication.SessionAuthenticationModule.SignOut(); 

क्योंकि मैं SessionAuthenticationModule इस्तेमाल किया उस में दावों रखने के लिए है, तो बंद प्रवेश करने के बाद, उपयोगकर्ता कुकीज़ में मौजूदा FedAut की वजह से एप्लिकेशन का उपयोग कर सकते हैं।

0
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie); 
FormsAuthentication.SignOut(); 
Session.Abandon(); 
0

बारे में एएसपी नेट MVC लॉगआउट काम नहीं कर रहा: -

मैं एक समस्या जहां एप्लिकेशन उत्पादन मोड में आईआईएस पर होस्ट क्रोम

के साथ सही काम नहीं कर रहा था, हालांकि यह जबकि सही काम किया था - सभी ब्राउज़रों में विजुअल स्टूडियो देव होस्टिंग का उपयोग - आईई

पर उत्पादन मोड में स्टार्टअप.एथ.सीएस में समस्याएं थीं। सुनिश्चित करें कि निम्नलिखित चीजों के लिए डुप्लिकेट कॉन्फ़िगरेशन नहीं हैं

app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 
app.UseCookieAuthentication((new CookieAuthenticationOptions(.....)) 
संबंधित मुद्दे