अस्वीकरण: मैं मॉडल ASP.NET पहचान में इस्तेमाल अपने आप को और क्या मैं चीजों की मेरी समझ यह है कि गलत हो सकता है है का कहना है कि (मैं भी स्पष्ट बातें करते हुए कहा जा सकता है, तो मैं माफी माँगता हूँ) से उलझन में हूँ । इसके अलावा, मैं हाल ही में Asp.Net कोर की पहचान के साथ खेल रहा था जो Asp.Net 4 के लिए उपलब्ध था की तुलना में थोड़ा अलग है, इसलिए मैं चीजों को मिश्रित कर सकता हूं। आवेदन कुकी और बाहरी कुकी:
कुकीज़
ASP.NET पहचान कुकीज़ के दो प्रकार के साथ चल रही है। एप्लिकेशन कुकी में आपके एप्लिकेशन की पहचान होती है और साइन इन मैनेजर द्वारा जारी की जाती है। बाहरी कुकी में बाहरी प्रमाणीकरण प्रदाता पहचान होती है और प्रमाणीकरण मिडलवेयर द्वारा जारी की जाती है (जैसे FacebookAuthenticationMiddleware
, उदाहरण के लिए)। आप बाहरी कुकी का उपभोग करने के लिए साइन इन मैनेजर का उपयोग करते हैं और इसके बजाय एप्लिकेशन कुकी जारी करते हैं। यदि आप बाहरी प्रमाणीकरण का उपयोग नहीं करते हैं तो आप बाहरी कुकीज़ से निपट नहीं पाते हैं।
प्रबंधक में
साइन
कक्षा इस तरह की घोषणा की:
public class SignInManager<TUser, TKey> : IDisposable
where TUser : class, IUser<TKey>
where TKey : IEquatable<TKey>
तो तुम जब तक कि यह IUser<TKey>
इंटरफ़ेस लागू करता है के रूप में अपने उपयोगकर्ता के रूप में किसी भी वर्ग का उपयोग कर सकते हैं। या यदि आप स्क्रैच से शुरू करते हैं तो IdentityUser
का उपयोग अपने आधार के रूप में करें, जो IUser<string>
लागू करता है। अतीत में मैंने int
TKey
के रूप में एक कार्यान्वयन बनाने का प्रयास किया था, लेकिन इसे काम करने की कोशिश करने में कुछ समय व्यतीत करने के बाद छोड़ दिया गया प्रयास और कोई प्रगति नहीं देख रही थी। सही किसी भी जांच के बिना दूर निर्दिष्ट उपयोगकर्ता के लिए
SignInManager.SignInAsync
विधि मुद्दों आवेदन कुकी में
पासवर्ड संकेत है, इसलिए यदि आप किसी भी कस्टम प्रमाणीकरण तर्क लागू, आप इसे (डिफ़ॉल्ट asp.net MVC टेम्पलेट का उपयोग करता है का उपयोग करना चाहें उपयोगकर्ता पंजीकरण करने के बाद उन्हें पंजीकरण के बाद सही प्रमाणीकरण करने की आवश्यकता नहीं है)।
SignInManager.PasswordSignInAsync
उपयोगकर्ता नाम और पासवर्ड दिए जाने पर उनकी वैधता जांचती है और यदि वे सही हैं तो एप्लिकेशन कुकी जारी करते हैं।
में
बाहरी संकेत के बजाय अपनी साइट विशेष रूप से आप उन्हें कुछ बाहरी वेब साइट का उपयोग करने के लिए प्रमाणीकृत और OAuth साथ आप के लिए प्रमाणीकरण जानकारी पारित करने के लिए चाहते हो सकता है के लिए लॉगिन और पासवर्ड बनाने के लिए उपयोगकर्ता होने के।
Asp.Net पहचान User
और Login
, जहां User
है ... अच्छी तरह से, उपयोगकर्ता (एक व्यक्ति) की धारणा है, और Login
जो User
प्रमाणित करता है के साथ क्रेडेंशियल है। User
में कई Login
एस हो सकते हैं।
OAuth प्रवाह Asp.Net वेब साइट से देखा के रूप में इस (प्रवाह में डिफ़ॉल्ट लॉग वी.एस. टेम्पलेट द्वारा उत्पन्न के आधार पर) की तरह दिखता है:
- आप बाहरी प्रमाणीकरण प्रदाताओं (प्रमाणीकरण मिडलवेयर) की स्थापना जो आप कर रहे हैं स्वीकार करने के इच्छुक (संभवतः बाहरी वेबसाइट पर पंजीकरण करना शामिल है। उदाहरण के लिए, फेसबुक प्रमाणीकरण का उपयोग करने के लिए आपको फेसबुक एप बनाने की ज़रूरत है, अपनी वेबसाइट पर इंगित करने के लिए वहां वापसी यूआरएल सेट अप करें और
FacebookAuthenticationMiddleware
को ऐप आईडी और ऐप गुप्त फेसबुक के साथ कॉन्फ़िगर करें आपको प्रदान करता है)।
- आप अनधिकृत उपयोगकर्ता को आपके द्वारा समर्थित बाहरी प्रदाताओं की पसंद के साथ प्रस्तुत करते हैं।
- उपयोगकर्ता एक प्रदाता चुनता है, पसंद अपनी Asp.Net वेब अनुप्रयोग को भेजा जाता है
- वेब अनुप्रयोग एक
ChallengeResult
प्रदाता प्रयोग की जाने वाली का नाम (यह आमतौर पर AccountController.ExternalLogin
में होता है) युक्त जारी करता है, वापसी URL को कॉल करने के लिए सेट कर दिया जाता AccountController.ExternalLoginCallback
और वास्तविक रिटर्न यूआरएल उपयोगकर्ता को बाद में सहेजा जाना चाहिए।
- उचित मिडलवेयर
ChallengeResult
ऑब्जेक्ट को पकड़ता है और इसे HTTP रीडायरेक्ट प्रतिक्रिया में परिवर्तित करता है जो उपयोगकर्ता के ब्राउज़र को तृतीय पक्ष वेबसाइट पर जाने का कारण बनता है जो उपयोगकर्ता को प्रमाण-पत्र के लिए पूछता है।
- सफल प्रमाणीकरण पर तीसरा हिस्सा वेब साइट प्रमाणीकरण मिडलवेयर (फेसबुक के लिए यह
/signin-facebook
आईआईआरसी) द्वारा तैयार किए गए विशिष्ट यूआरएल पर उपयोगकर्ता को वापस वेबसाइट पर रीडायरेक्ट करता है।
- प्रमाणीकरण मिडलवेयर अवरोध से इस कॉल डेटा बाहरी कुकी तृतीय पक्ष वेब साइट से और अगर सब कुछ ठीक मुद्दों से पारित कर दिया मान्य करता है, और जो चरण 4 (
AccountController.ExternalLoginCallback
होना चाहिए जो) पर वापसी URL के रूप में स्थापित किया गया था करने के लिए आप पुनर्निर्देश।
AccountController.ExternalLoginCallback
में आपको बाहरी कुकी का उपभोग करने और इसके बजाय एक एप्लिकेशन कुकी जारी करने की उम्मीद है। यही SignInManager.ExternalSignInAsync
करता है: लॉग इन जानकारी दी गई है, यह उपयोगकर्ता को Login
के साथ ढूंढने का प्रयास करता है। यदि यह पाता है, तो यह एप्लिकेशन कुकी जारी करता है; यदि ऐसा नहीं होता है, तो यह आपको सूचित करता है और आपको जो करना चाहिए वह आपको करना चाहिए जब आपको अज्ञात Login
प्राप्त होता है (आमतौर पर, आप इस बिंदु पर नया उपयोगकर्ता बनाते हैं। वीएस टेम्पलेट से डिफ़ॉल्ट कार्यान्वयन इस बिंदु पर अतिरिक्त जानकारी मांगता है और उपयोगकर्ता को AccountController.ExternalLoginConfirmation
में बनाता है)। उसके बाद उपयोगकर्ता चरण में वास्तविक वापसी यूआरएल "बाद के लिए सहेजी" पर भेज दिया जाएगा 4.
कस्टम भंडारण
मैं अब तक Asp.Net पहचान के लिए कस्टम भंडारण बनाने के साथ असफल रहा है। यह आम तौर पर अपने स्वयं के उपयोगकर्ता प्रबंधक वर्ग IUserStore<TUser, TKey>
, IUserRoleStore<TUser, TKey>
तरह इंटरफेस के UserManager<TUser, TKey>
और भंडारण वर्ग को लागू करने गुच्छा उतरते, आदि
बहुत अच्छा जवाब को लागू करना शामिल है।बाहरी साइन इन में चरण 8 के बारे में, क्या मैं वेब एपीआई में साइनइनमेनगर का भी उपयोग करूंगा? –
'साइनइनमैनगर' एक सहायक वर्ग है जो बाहरी/एप्लिकेशन कुकीज़, पासवर्ड सत्यापन और 2 एफए से संबंधित है। सुनिश्चित नहीं है कि उनमें से कोई भी वेब एपीआई के लिए उपयोगी है। – n0rd
बहुत स्पष्ट और सहायक। यहां तक कि स्पष्ट रूप से स्पष्ट रूप से स्पष्ट रूप से प्रस्तुत करने की आवश्यकता है! धन्यवाद! –