टी एल; डॉ
पहचानकर्ता = OAuth 2.0 / OpenId- कनेक्ट के माध्यम से टोकन एन्क्रिप्शन और सत्यापन सेवाएं
ASP.NET पहचान = ASP.NET में वर्तमान पहचान प्रबंधन रणनीति
मैं पिछले संस्करण के .Net में किए गए तरीके के समान कैसे प्रमाणित कर सकता हूं वह अभी भी काम करने का पुराना तरीका है या एक नया संस्करण है।
मुझे कोई कारण नहीं है कि आप ASP.NET Core में पुराने तरीके को प्राप्त नहीं कर सके, लेकिन सामान्य रूप से, उस रणनीति को ASP.NET पहचान के साथ बदल दिया गया था, और ASP.NET पहचान जीवित है और ASP.NET Core में अच्छी तरह से है।
https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity
ASP.NET पहचान उपयोगकर्ता नाम, पासवर्ड (हैशेड), ईमेल, फोन जैसी उपयोगकर्ता जानकारी रखने के लिए SQL सर्वर जैसे एक बैकिंग स्टोर का उपयोग करता है और आसानी से FirstName, LastName या अन्य कुछ भी रखने के लिए बढ़ाया जा सकता है। तो, वास्तव में कुकी में उपयोगकर्ता जानकारी को एन्क्रिप्ट करने का कोई कारण नहीं है और इसे क्लाइंट से सर्वर पर आगे और पीछे से पास करें। यह उपयोगकर्ता के दावे, उपयोगकर्ता के टोकन, उपयोगकर्ता की भूमिका और बाहरी लॉगिन जैसी धारणाओं का समर्थन करता है। यहाँ ASP.NET पहचान में संस्थाएँ हैं:
- AspNetUsers
- AspNetUserRoles
- AspNetUserClaims
- AspNetUserLogins (बाहरी पहचान प्रदाताओं को जोड़ने के लिए, जैसे Google, AAD)
- AspNetUserTokens (access_tokens और रीफ्रेश_tokens जैसी चीजों को स्टोर करने के लिए)
अपने स्वयं के कस्टम सिद्धांत बनाने के लिए अपने स्वयं के टोकन सर्वर छंद का उपयोग करने के पेशेवरों और विपक्ष क्या हैं?
एक टोकन सर्वर एक प्रणाली होगी जो प्राधिकरण और / या प्रमाणीकरण जानकारी युक्त एक सरल डेटा संरचना उत्पन्न करती है। प्राधिकरण आमतौर पर access_token नामक टोकन के लिए लेता है । यह "घर की चाबियाँ" होगी, इसलिए बोलने के लिए, आपको द्वार के माध्यम से और एक संरक्षित संसाधन के निवास में, आमतौर पर एक वेब एपी। प्रमाणीकरण के लिए, id_token
उपयोगकर्ता / व्यक्ति के लिए एक विशिष्ट पहचानकर्ता होता है। हालांकि इस तरह के पहचानकर्ता को access_token में रखना आम है, अब ऐसा करने के लिए एक समर्पित प्रोटोकॉल है: OpenID- कनेक्ट ।
आपकी स्वयं की सुरक्षा टोकन सेवा (एसटीएस) का कारण, क्रिप्टोग्राफी के माध्यम से आपकी सूचना परिसंपत्तियों की सुरक्षा करना होगा, और उन संसाधनों को एक्सेस करने वाले ग्राहकों (अनुप्रयोगों) को नियंत्रित करना होगा। इसके अलावा, पहचान नियंत्रण के मानक अब OpenID- कनेक्ट विनिर्देशों में मौजूद हैं। IdentityServer एक OAuth 2.0 प्राधिकरण सर्वर का एक उदाहरण है जो एक OpenID- कनेक्ट प्रमाणीकरण सर्वर के साथ संयुक्त है।
लेकिन इसमें से कोई भी आवश्यक नहीं है यदि आप अपने आवेदन में केवल एक उपयोगकर्ता तालिका चाहते हैं। आपको एक टोकन सर्वर की आवश्यकता नहीं है- बस ASP.NET पहचान का उपयोग करें। ASP.NET पहचान सर्वर पर एक ClaimsIdentity ऑब्जेक्ट के लिए अपने उपयोगकर्ता को मैप करता है- एक कस्टम IPrincipal वर्ग के लिए कोई ज़रूरत नहीं है।
क्लाउड आधारित समाधान या एक अलग टोकन सर्वर का उपयोग करते समय आप अपने वर्तमान अनुप्रयोग के साथ कैसे एकीकृत करेंगे, क्या मुझे अभी भी अपने आवेदन में एक उपयोगकर्ता तालिका की आवश्यकता होगी आप दोनों को कैसे जोड़ेंगे?
किसी एप्लिकेशन के साथ अलग-अलग पहचान समाधानों को एकीकृत करने के लिए ये ट्यूटोरियल देखें:
https://identityserver4.readthedocs.io/en/latest/quickstarts/0_overview.html
https://auth0.com/docs/quickstart/webapp/aspnet-core
कम से कम आपको बाहरी प्रदाता के उपयोगकर्ता पहचानकर्ता को उपयोगकर्ता नाम मैप करने के लिए दो कॉलम तालिका की आवश्यकता होगी। यह ASP.NET पहचान में AspNetUserLogins तालिका क्या करता है। हालाँकि, उस तालिका की पंक्तियाँ AspNetUsers में उपयोगकर्ता रिकॉर्ड होने पर निर्भर हैं।
ASP.NET पहचान Google, Microsoft, फेसबुक जैसे किसी भी प्रदाता का समर्थन करती है, कोई भी OpenID- कनेक्ट प्रदाता, Azure AD पहले से ही हैं। (Google और Microsoft ने OpenID- कनेक्ट प्रोटोकॉल को पहले ही लागू कर दिया है, इसलिए आपको उनके कस्टम एकीकरण पैकेज की आवश्यकता नहीं है , उदाहरण के लिए, इस तरह से )। इसके अलावा, ADFS अभी ASP.NET कोर आइडेंटिटी पर उपलब्ध नहीं है।
ASP.NET पहचान में बाहरी प्रदाताओं के साथ आरंभ करने के लिए यह दस्तावेज़ देखें:
https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/
होने के नाते इतने सारे अलग-अलग समाधान हैं कि मैं एक उद्यम आवेदन कैसे बना सकता हूं, जीमेल / फेसबुक के माध्यम से लॉग इन करने की अनुमति देने के लिए, जबकि अन्य एसएसओ के लिए विस्तार करने में सक्षम होने के बावजूद
जैसा कि ऊपर बताया गया है, ASP.NET आइडेंटिटी पहले से ही ऐसा करता है। "बाहरी प्रदाता" तालिका बनाना और आपकी बाहरी लॉगिन प्रक्रिया को डेटा करना काफी आसान है। इसलिए जब एक नया "एसएसओ" आता है, तो बस प्रदाता के यूआरएल, क्लाइंट आईडी और गुप्त जैसे गुणों के साथ एक नई पंक्ति जोड़ें। ASP.NET पहचान में पहले से ही विजुअल स्टूडियो टेम्प्लेट में निर्मित UI है, लेकिन कूलर बटन के लिए सामाजिक लॉगिन देखें ।
सारांश
अगर आपको क्षमताओं में पासवर्ड साइन और उपयोगकर्ता प्रोफ़ाइल के साथ बस एक उपयोगकर्ता तालिका की आवश्यकता है, तो ASP.NET पहचान एकदम सही है। बाहरी अधिकारियों को शामिल करने की आवश्यकता नहीं है। लेकिन, यदि कई एप्स को कई एप्स तक पहुंचने की आवश्यकता है, तो पहचान और एक्सेस टोकन को सुरक्षित और मान्य करने के लिए एक स्वतंत्र प्राधिकरण समझ में आता है। IdentityServer एक अच्छा फिट है, या देखना openiddict कोर , या Auth0 एक बादल समाधान के लिए।
मेरी क्षमा याचना यह निशान नहीं मार रहा है या अगर यह बहुत ही परिचयात्मक है। आप जिस बैल की तलाश में हैं, उसे पाने के लिए कृपया बेझिझक बातचीत करें।
परिशिष्ट: कुकी प्रमाणीकरण
कुकीज़ के साथ नंगे हड्डियों का प्रमाणीकरण करने के लिए, इन चरणों का पालन करें। लेकिन, मेरी जानकारी में एक कस्टम दावा प्रिंसिपल समर्थित नहीं है। उसी प्रभाव को प्राप्त करने के लिए, ClaimPrincipal
वस्तु की दावा सूची का उपयोग करें ।
डायलॉग में "नो ऑथेंटिकेशन" का चयन करते हुए विज़ुअल स्टूडियो 2015/2017 में एक नया ASP.NET Core 1.1 वेब एप्लिकेशन बनाएं। फिर पैकेज जोड़ें:
Microsoft.AspNetCore.Authentication.Cookies
इस (पहले ) जगह Configure
में विधि के तहत :Startup.cs
app.UseMvc
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationScheme = "MyCookieMiddlewareInstance",
LoginPath = new PathString("/Controller/Login/"),
AutomaticAuthenticate = true,
AutomaticChallenge = true
});
फिर एक लॉगिन यूआई बनाएं और html फॉर्म को इस तरह एक्शन विधि में पोस्ट करें:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(String username, String password, String returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, username),
new Claim("FirstName", "Alice"),
new Claim("LastName", "Smith")
};
var identity = new ClaimsIdentity(claims, "Password");
var principal = new ClaimsPrincipal(identity);
await HttpContext.Authentication.SignInAsync("MyCookieMiddlewareInstance", principal);
return RedirectToLocal(returnUrl);
}
ModelState.AddModelError(String.Empty, "Invalid login attempt.");
return View();
}
HttpContext.User ऑब्जेक्ट में आपके कस्टम दावे होने चाहिए और आसानी से ClaimPrincipal के सूची संग्रह को पुनर्प्राप्त करने योग्य हैं।
मुझे उम्मीद है कि यह पूरी तरह से समाधान / परियोजना एक StackOverflow पोस्ट के लिए थोड़ा सा लगता है।