यदि आप Google को काम करने के लिए साइन इन करना चाहते हैं, तो आपको उन सभी की आवश्यकता है। यह इस तरह काम करता है। ओविन पाइपलाइन में, आपके पास तीन मिडलवेयर घटक हैं: (1) कुकी प्रमाणीकरण मिडलवेयर सक्रिय मोड में चल रहा है, (2) कुकी प्रमाणीकरण मिडलवेयर का एक और उदाहरण लेकिन निष्क्रिय मोड में चल रहा है, और (3) Google प्रमाणीकरण मिडलवेयर। ऐसा ही होगा।
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
...
}); // Active
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); // Passive
app.UseGoogleAuthentication(...);
जब कोई 401 होता है, तो आपका उपयोगकर्ता Google पर रीडायरेक्ट हो जाता है। वहां, आपका उपयोगकर्ता लॉग इन करता है और Google प्रमाण-पत्र को मान्य करता है। Google फिर उपयोगकर्ता को आपके ऐप पर रीडायरेक्ट करता है। इस बिंदु पर, Google प्रमाणीकरण मिडलवेयर लॉगिन जानकारी प्राप्त करता है, एक अनुदान (बाहरी कुकी पढ़ें) और ओविन पाइपलाइन को शॉर्ट सर्किट लागू करता है और बाहरी कॉलबैक यूआरएल पर रीडायरेक्ट करता है, जो AccountController
की क्रिया विधि से मेल खाता है। इसलिए, इस बिंदु पर जब रीडायरेक्ट के परिणामस्वरूप अनुरोध आपके ऐप पर आता है, तो आपको उपयोगकर्ता नाम और ईमेल दावों के साथ बाहरी कुकी मिलती है।
इस कुकी को पढ़ने और Google से डेटा (उपयोगकर्ता नाम, आदि) को पुनर्प्राप्त करने के लिए, आप निष्क्रिय मोड में चल रहे कुकी प्रमाणीकरण मिडलवेयर का उपयोग करते हैं। चूंकि यह मिडलवेयर निष्क्रिय मोड में चलता है, इसलिए इसे कुकी पढ़ने के लिए कहा जाना चाहिए। ऐसा होता है जब AuthenticationManager.GetExternalLoginInfoAsync()
पर कॉल ExternalLoginCallback
क्रिया विधि में किया जाता है। उस समय, बाहरी कुकी से पहचान स्थापित की गई है और इस पहचान में Google से केवल नाम और ईमेल दावे शामिल हैं।
आमतौर पर, इस बिंदु पर आपको अपने एप्लिकेशन डेटा स्टोर से उपयोगकर्ता विशिष्ट जानकारी पुनर्प्राप्त करने और पहचान के लिए और दावों को जोड़ने की आवश्यकता होगी। इसलिए, आप बाहरी कुकी मिडलवेयर पर Signout
पर कॉल करते हैं, जो यह भी सुनिश्चित करेगा कि बाहरी कुकी को इसे समाप्त होने से पहले वापस नहीं भेजा जाएगा। इसलिए, उस समय उपलब्ध पहचान जानकारी का उपयोग करके, UserManager.FindAsync
को ExternalLoginCallback
एक्शन विधि में बुलाया जाता है, जो उपयोगकर्ता को सभी एप्लिकेशन विशिष्ट दावों के साथ वापस कर देना चाहिए। उस नई पहचान का उपयोग करके, आप सक्रिय मोड में चल रहे कुकी प्रमाणीकरण मिडलवेयर पर SignIn
पर कॉल करें। यह सुनिश्चित करता है कि एक नई कुकी बनाई गई है। बाहरी कुकी की तुलना में, इस नई कुकी में सभी एप्लिकेशन विशिष्ट दावे शामिल हैं।इसके बाद, आपको यह कुकी वापस मिलती है और सक्रिय मोड में चल रहे कुकी प्रमाणीकरण मिडलवेयर सक्रिय रूप से कुकी पढ़ता है और सभी एप्लिकेशन विशिष्ट दावों की पूरी सूची के साथ पहचान स्थापित करता है।
तो, यदि आप साइनइन नहीं कहते हैं, तो आप उस कुकी को सभी एप्लिकेशन विशिष्ट दावों को नहीं बनाएंगे। लेकिन फिर यह आपके ऊपर कुछ अन्य तंत्र का उपयोग करने के लिए है। बॉक्स व्यवहार से बाहर यह है कि सभी कुकी विशिष्ट दावों वाली एक स्थानीय कुकी उस कॉल के माध्यम से SignIn
पर बनाई जाती है और बाद में सक्रिय मोड में चल रहे कुकी मिडलवेयर द्वारा पढ़ी जाती है।
अद्यतन: मैंने दो कुकी मिडलवेयर उदाहरणों का उपयोग किए बिना कैसे दूर हो सकते हैं यह बताने के लिए एक ब्लॉग पोस्ट बनाया है। http://lbadri.wordpress.com/2014/10/14/barebones-asp-net-mvc-google-signin-through-owin-middleware/
UserManager.FindAsync बिट्स अब पहचान 2.2.0 (जो ओएसएस नहीं है) के लिए साइनइनमैनगर में टकरा गया है, लेकिन मुझे यकीन है कि यह अभी भी हुड के तहत किया जा रहा है। अनुकूलन के कारण प्रतिबिंबक बहुत मदद नहीं करते हैं। तो अगर कोई उस बिट के साथ पालन करने की कोशिश कर रहा है और इसे नमूना कोड में नहीं ढूंढ रहा है, तो यही कारण है कि। इस तरह यह 1.0 और संभवतः 2.0 में किया गया था लेकिन 2.2 में दूर किया गया था और संभवतः vNext में थोड़ा अलग है। मैं सराहना करता हूं कि यह एक पहचान पद नहीं है लेकिन संभावना है कि बहुत से लोग उस ढांचे से नमूना कोड देख रहे हैं। – rism
क्या हो सकता है जब हम AuthenticationManager.GetExternalLoginInfoAsync() को कॉल करते हैं, यह पहली बार loginInfo देता है, लेकिन अगर हम फिर से लॉगिन करने के लिए यह शून्य हो जाता है। ऐप पूल रीसायकल करने के बाद यह फिर से loginInfo लौटाता है। @Badri – fcartu
कोई कारण है कि मैं निष्क्रिय निष्क्रियवेयर का उपयोग क्यों नहीं कर सकता? यदि मुझे केवल एक चीज की आवश्यकता है तो उपयोगकर्ता पहचान (जैसे फेसबुक: 133454545454)। – LOST