/ / क्या आईई के ClearAuthenticationCache के बराबर ब्राउज़र है? - asp.net, प्रमाणीकरण, क्रॉस ब्राउज़र

क्या आईई के ClearAuthenticationCache के बराबर ब्राउज़र है? - asp.net, प्रमाणीकरण, क्रॉस ब्राउज़र

मेरे पास कुछ आंतरिक .NET वेब एप्लिकेशन हैं जिनके लिए उपयोगकर्ताओं को "लॉग आउट" करने की आवश्यकता है। मुझे पता है कि यह इंट्रानेट एप्लिकेशन पर प्रतीत हो सकता है, लेकिन फिर भी यह वहां है।

हम अपने लिए विंडोज प्रमाणीकरण का उपयोग कर रहे हैंइंट्रानेट ऐप्स, इसलिए हम मूल प्रमाणीकरण के साथ हमारी सक्रिय निर्देशिका में जुड़ते हैं और क्रेडेंशियल ब्राउज़र कैश में संग्रहीत होते हैं, क्योंकि .NET फॉर्म प्रमाणीकरण का उपयोग करते समय कुकी के विपरीत।

आईई 6 + में आप निम्न कार्य करके बनाए गए एक विशेष जावास्क्रिप्ट फ़ंक्शन का लाभ उठा सकते हैं:

document.execCommand("ClearAuthenticationCache", "false")

हालांकि, अन्य ब्राउज़रों के लिए होना चाहिएसमर्थित (अर्थात् इस समय फ़ायरफ़ॉक्स, लेकिन मैं बहु-ब्राउज़र समर्थन के लिए प्रयास करता हूं), मैं बस उपयोगकर्ता को संदेश प्रदर्शित करता हूं कि उन्हें एप्लिकेशन से लॉग आउट करने के लिए अपने ब्राउज़र को बंद करने की आवश्यकता है, जो प्रभावी रूप से एप्लिकेशन कैश को फ़्लश करता है।

क्या किसी को कुछ आदेश / हैक्स / आदि के बारे में पता है। कि मैं प्रमाणीकरण कैश फ्लश करने के लिए अन्य ब्राउज़रों में उपयोग कर सकते हैं?

उत्तर:

उत्तर № 1 के लिए 11

मैं एक फिक्स के साथ आया हूं जो काफी सुसंगत लगता है लेकिन हैकी और है मैं अभी भी इसके साथ खुश नहीं हूँ.

हालांकि यह काम करता है :-)

1) उन्हें लॉगऑफ पेज पर रीडायरेक्ट करें

2) उस पृष्ठ पर अजीक्स को एक स्क्रिप्ट को डमी क्रेडेंशियल्स (jQuery में नमूना) के साथ एक और पृष्ठ लोड करने के लिए आग लगाना:

$j.ajax({
url: "<%:Url.Action("LogOff401", new { id = random })%>",
type: "POST",
username: "<%:random%>",
password: "<%:random%>",
success: function () { alert("logged off"); }
});

3) यह हमेशा पहली बार 401 लौटाएगा (नए प्रमाण पत्र पारित करने के लिए मजबूर करने के लिए) और फिर केवल डमी प्रमाण-पत्र (एमवीसी में नमूना) स्वीकार करें:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LogOff401(string id)
{
// if we"ve been passed HTTP authorisation
string httpAuth = this.Request.Headers["Authorization"];
if (!string.IsNullOrEmpty(httpAuth) &&
httpAuth.StartsWith("basic", StringComparison.OrdinalIgnoreCase))
{
// build the string we expect - don"t allow regular users to pass
byte[] enc = Encoding.UTF8.GetBytes(id + ":" + id);
string expected = "basic " + Convert.ToBase64String(enc);

if (string.Equals(httpAuth, expected, StringComparison.OrdinalIgnoreCase))
{
return Content("You are logged out.");
}
}

// return a request for an HTTP basic auth token, this will cause XmlHttp to pass the new header
this.Response.StatusCode = 401;
this.Response.StatusDescription = "Unauthorized";
this.Response.AppendHeader("WWW-Authenticate", "basic realm="My Realm"");

return Content("Force AJAX component to sent header");
}

4) अब यादृच्छिक स्ट्रिंग क्रेडेंशियल्स को ब्राउज़र द्वारा स्वीकार और कैश किया गया है। जब वे किसी अन्य पृष्ठ पर जाते हैं तो वे उनका उपयोग करने, विफल होने और फिर सही लोगों के लिए संकेत देने का प्रयास करेंगे।


जवाब के लिए 6 № 2

मोज़िला ने डीओएम के माध्यम से उपलब्ध क्रिप्टो ऑब्जेक्ट को कार्यान्वित किया window ऑब्जेक्ट, जिसमें है logout ब्राउज़र स्तर पर एसएसएल सत्र स्थिति को साफ़ करने के लिए फ़ंक्शन (फ़ायरफ़ॉक्स 1.5 ऊपर) ताकि "किसी भी टोकन पर अगले निजी ऑपरेशन के लिए उपयोगकर्ता पासवर्ड की आवश्यकता होगी" (देखें इस)।

क्रिप्टो ऑब्जेक्ट का कार्यान्वयन प्रतीत होता है वेब क्रिप्टो एपीआई, और के अनुसार इस दस्तावेज़, DOMCrypt API और भी फ़ंक्शन जोड़ देगा।

जैसा कि माइक्रोसॉफ्ट आईई (6 ऊपर) के ऊपर बताया गया है: document.execCommand("ClearAuthenticationCache", "false")

मुझे क्रोम में एसएलएल कैश को साफ़ करने का कोई तरीका नहीं मिला है (देखें इस तथा इस दोष रिपोर्ट)।

यदि ब्राउज़र ऐसा करने के लिए कोई एपीआई प्रदान नहीं करता है, तो मुझे लगता है कि हम बेहतर कर सकते हैं कि उपयोगकर्ता ब्राउज़र को बंद करने के लिए निर्देश दे।

यहां मैं क्या करता हूं:

var agt=navigator.userAgent.toLowerCase();
if (agt.indexOf("msie") !== -1) {
document.execCommand("ClearAuthenticationCache","false");
}
//window.crypto is defined in Chrome, but it has no logout function
else if (window.crypto && typeof window.crypto.logout === "function"){
window.crypto.logout();
}
else{
window.location = "/page/to/instruct/the/user/to/close/the/browser";
}

जवाब के लिए 5 № 3

कुछ नोट्स कुछ लोगों ने कहा है कि ब्राउज़र को अपने स्वयं के प्रमाण-पत्र छोड़ने के लिए आपको अमान्य प्रमाण-पत्रों के साथ अजाक्स अनुरोध को आग लगाना होगा।

यह सच है लेकिन जैसा किथ ने बताया, यह आवश्यक है कि सर्वर पेज इस विधि के लिए लगातार काम करने के लिए इन प्रमाण-पत्रों को स्वीकार करने का दावा करता है।

एक समान नोट पर: आपके पृष्ठ के लिए केवल 401 त्रुटि के माध्यम से लॉगिन संवाद लाने के लिए पर्याप्त नहीं है। यदि उपयोगकर्ता संवाद से बाहर निकलता है तो उनके कैश किए गए प्रमाण-पत्र भी अप्रभावित हैं।

इसके अलावा यदि आप मोज़िला को पोक कर सकते हैं https://bugzilla.mozilla.org/show_bug.cgi?id=287957 फ़ायरफ़ॉक्स के लिए उचित फिक्स जोड़ने के लिए। एक वेबकिट बग लॉग ऑन किया गया था https://bugs.webkit.org/show_bug.cgi?id=44823। आईई विधि के साथ एक गरीब लेकिन कार्यात्मक समाधान लागू करता है:

document.execCommand("ClearAuthenticationCache", "false");

यह दुर्भाग्यपूर्ण है कि हमें उपयोगकर्ता को लॉग आउट करने के लिए इन लंबाईों पर जाना होगा।


जवाब के लिए 2 № 4

FormsAuth का उपयोग क्यों न करें, बल्कि जानकारी के अनुसार ActiveDirectory के विरुद्ध यह धागा। यह मूल एथ के रूप में सुरक्षित (इन) है, लेकिन लॉग आउट करना केवल कुकी को खाली करने का विषय है (या बल्कि, कॉल करना FormsAuthentication.SignOut)


जवाब के लिए 2 № 5

मैं एक समान समाधान की खोज कर रहा हूं और ट्रैक (एक मुद्दा प्रबंधन प्रणाली) के लिए एक पैच में आया जो ऐसा करता है।

मैंने कोड को देखा है (और मैं थक गया हूं, इसलिए मैं सबकुछ समझा नहीं रहा हूं); मूल रूप से आपको एक एजेक्स कॉल करने की ज़रूरत है अमान्य गारंटी साख आपके लॉगिन पेज पर। ब्राउज़र को 401 मिलेगा और इसकी जरूरत हैअगली बार जब आप वहां जाते हैं तो आपको सही प्रमाण-पत्र के लिए पूछने के लिए। आप रीडायरेक्ट के बजाय AJAX का उपयोग करते हैं ताकि आप गलत क्रेडेंशियल निर्दिष्ट कर सकें और ब्राउज़र एक संवाद पॉपअप नहीं करता है।

पैच पर (http://trac-hacks.org/wiki/TrueHttpLogoutPatch) पृष्ठ वे बहुत प्राथमिक AJAX का उपयोग करते हैं; jQuery या प्रोटोटाइप आदि जैसे कुछ बेहतर शायद बेहतर है, हालांकि यह काम पूरा हो जाता है।


जवाब के लिए 0 № 6

उम्मीद है कि यह उपयोगी होगा जब तक कोई वास्तव में एक स्पष्ट उत्तर के साथ आता है - दो साल पहले एक संदेश बोर्ड पर इस मुद्दे पर चर्चा की गई थी.

HTH


उत्तर के लिए 0 № 7

खैर, मैं थोड़ी देर के लिए बगजिला के आसपास ब्राउज़ कर रहा हूं और प्रतीत होता है कि प्रमाणीकरण को साफ़ करने के लिए आप जा सकते हैं सबसे अच्छा तरीका गैर-मौजूद प्रमाण पत्र भेजना होगा।

यहां और पढ़ें: https://bugzilla.mozilla.org/show_bug.cgi?id=287957