मुझे ओविन कुकी प्रमाणीकरण का उपयोग करने में एक अजीब समस्या है।
जब मैं अपना IIS सर्वर प्रमाणीकरण शुरू करता हूं तो IE / Firefox और Chrome पर पूरी तरह से काम करता है।
मैंने विभिन्न प्लेटफार्मों पर प्रमाणीकरण और लॉगिंग के साथ कुछ परीक्षण करना शुरू किया और मैं एक अजीब त्रुटि के साथ आया हूं। छिटपुट रूप से ओविन फ्रेमवर्क / IIS ब्राउजरों को कोई भी कुकीज़ नहीं भेजता है। मैं एक उपयोगकर्ता नाम और पासवर्ड टाइप करूंगा जो कोड रन को सही करता है, लेकिन कोई भी कुकी ब्राउज़र को बिल्कुल भी डिलीवर नहीं होती है। यदि मैं सर्वर को फिर से शुरू करता हूं तो यह काम करना शुरू कर देता है तो कुछ बिंदु पर मैं लॉगिन करने की कोशिश करूंगा और फिर से कुकीज़ डिलीवर होना बंद हो जाएंगे। कोड पर कदम रखने से कुछ नहीं होता है और कोई त्रुटि नहीं होती है।
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
CookieHttpOnly = true,
AuthenticationType = "ABC",
LoginPath = new PathString("/Account/Login"),
CookiePath = "/",
CookieName = "ABC",
Provider = new CookieAuthenticationProvider
{
OnApplyRedirect = ctx =>
{
if (!IsAjaxRequest(ctx.Request))
{
ctx.Response.Redirect(ctx.RedirectUri);
}
}
}
});
और मेरी लॉगिन प्रक्रिया के भीतर मेरे पास निम्नलिखित कोड हैं:
IAuthenticationManager authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
authenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var authentication = HttpContext.Current.GetOwinContext().Authentication;
var identity = new ClaimsIdentity("ABC");
identity.AddClaim(new Claim(ClaimTypes.Name, user.Username));
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.User_ID.ToString()));
identity.AddClaim(new Claim(ClaimTypes.Role, role.myRole.ToString()));
authentication.AuthenticationResponseGrant =
new AuthenticationResponseGrant(identity, new AuthenticationProperties()
{
IsPersistent = isPersistent
});
authenticationManager.SignIn(new AuthenticationProperties() {IsPersistent = isPersistent}, identity);
अद्यतन 1: ऐसा लगता है कि समस्या का एक कारण तब होता है जब मैं समस्याओं को शुरू करने के लिए आइटम जोड़ता हूं। कुछ सरल की तरह जोड़ना Session.Content["ABC"]= 123
समस्या पैदा करता है।
मैं जो बना सकता हूं वह इस प्रकार है: 1) (क्रोम) जब मैं लॉगिन करता हूं तो मुझे ASP.NET_SessionId + मेरा प्रमाणीकरण कुकी मिलता है। 2) मैं एक पृष्ठ पर जाता हूं जो एक सत्र सेट करता है। कॉन्टेंट्स ... 3) एक नया ब्राउज़र (फ़ायरफ़ॉक्स) खोलें और लॉगिन का प्रयास करें और इसे ASP.NET_SessionId प्राप्त नहीं होता है और न ही इसे एक प्रमाणीकरण कुकी मिलती है 4) पहला ब्राउज़र ASP.NET_SessionId में यह काम करना जारी रखता है। जिस मिनट मैं इस कुकी को हटाता हूं, उसमें वही समस्या होती है, जो अन्य सभी ब्राउज़रों के साथ होती है, जो मैं आईपी एड्रेस (10.xxx) और लोकलहोस्ट पर काम कर रहा हूं।
अद्यतन 2:ASPNET_SessionId
OWIN के साथ प्रमाणीकरण से पहले मेरे login_load पृष्ठ पर पहली बार फोर्स निर्माण ।
1) इससे पहले कि मैं ओविन के साथ प्रमाणित करूं मैं Session.Content
ASP.NET_SessionId 2 शुरू करने के लिए अपने लॉगिन पृष्ठ पर एक यादृच्छिक मूल्य बनाता हूं ) फिर मैं प्रमाणित करता हूं और आगे के सत्र 3 करता हूं) अन्य ब्राउज़र अब काम करने लगते हैं
यह विचित्र है। मैं केवल यह निष्कर्ष निकाल सकता हूं कि एएसपी और ओविन के साथ यह सोचने के लिए कुछ है कि वे अलग-अलग डोमेन में हैं या ऐसा कुछ।
अपडेट 3 - दोनों के बीच अजीब व्यवहार।
पहचाने गए अतिरिक्त अजीब व्यवहार - ओवेन और एएसपी सत्र का समय अलग है। मैं जो देख रहा हूं, वह यह है कि मेरे ओविन सत्र मेरे एएसपी सत्रों की तुलना में लंबे समय तक जीवित रहे हैं। इसलिए जब लॉग इन करें: 1.) मेरे पास एक पका हुआ आधारित सेशन 2 सत्र है।) मैंने कुछ सत्र चर निर्धारित किए हैं
मेरा सत्र चर (2) उल्लू कुकी सत्र चर बलों को फिर से लॉगिन करने से पहले "मर" जाता है, जिससे मेरे पूरे आवेदन में अप्रत्याशित व्यवहार होता है। (व्यक्ति लॉग इन है, लेकिन वास्तव में लॉग इन नहीं है)
अपडेट 3 बी
कुछ खुदाई के बाद मैंने एक पृष्ठ पर कुछ टिप्पणियां देखीं जो कहती हैं कि "फ़ॉर्म" प्रमाणीकरण टाइमआउट और सत्र टाइमआउट को मिलान करने की आवश्यकता है। मैं आम तौर पर सोच रहा हूं कि दोनों सिंक में हैं लेकिन जो भी कारण है कि दोनों सिंक में नहीं हैं।
Workarounds का सारांश
1) हमेशा प्रमाणीकरण से पहले एक सत्र बनाएँ। जब आप एप्लिकेशन शुरू करते हैं तो मूल रूप से सत्र बनाएंSession["Workaround"] = 0;
2) [प्रायोगिक] यदि आप कुकीज़ को जारी रखते हैं तो सुनिश्चित करें कि आपका OWIN टाइमआउट / लंबाई आपके web.config (परीक्षण में) में आपके सेशनटाइम से अधिक लंबा है।