Asp.net core 3.1 में किरायेदार के आधार पर प्रमाणीकरण योजनाओं को पंजीकृत करें


12

वर्तमान में, मैंने डिफ़ॉल्ट क्लाइंट आईडी और रहस्यों के साथ बाहरी लॉगिन प्रदाताओं के साथ एक पहचान सर्वर 4 वेब एप्लिकेशन बनाया है। लेकिन मेरा लक्ष्य किरायेदार के आधार पर प्रमाणीकरण प्रदाताओं जैसे एज़्योर, Google, फेसबुक को पंजीकृत करना है।

मैंने SaasKit मल्टी-टेनेंसी असेंबली का उपयोग किया है , यहाँ मैंने app.usepertenant () मिडलवेयर की कोशिश की है । लेकिन UseGoogleAuthentication () विधि अप्रचलित है, इसलिए मैं इस उपयोगी मिडलवेयर का उपयोग करके बहु-किरायेदार प्रमाणीकरण प्राप्त नहीं कर सका।

वर्तमान कोड,

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
   .AddMicrosoftAccount(option =>
     {
        option.ClientId = "clientid";
        option.ClientSecret = "clientsecret";
        option.SaveTokens = true;
     });

अपेक्षित कोड नीचे की तरह है,

var authentication = services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme);

if (tenant.hasMicrosoft)
{
   authentication.AddMicrosoftAccount(option =>
   {
        option.ClientId = "clientid";
        option.ClientSecret = "clientsecret";
        option.SaveTokens = true;
   });
}

if (tenant.hasGoogle)
{
   authentication.AddGoogle(option =>
   {
        option.ClientId = "clientid";
        option.ClientSecret = "clientsecret";
        option.SaveTokens = true;
   });
}

authentication.AddCookie( options =>
 {
    options.SlidingExpiration = true;
    options.ExpireTimeSpan = new TimeSpan(7, 0, 0, 0);
 });


शायद आप इस धागे में उत्तर या वर्कअराउंड पा सकते हैं ।
Ruard van Elburg

@RuardvanElburg आपके उत्तर के लिए धन्यवाद, आपके सुझाए गए थ्रेड से हम आवेदन शुरू करते समय किरायेदार के आधार पर पहले से पंजीकृत योजनाओं के विकल्पों को अपडेट कर सकते हैं। के बाद हम उन्हें अद्यतन नहीं कर सकते।
माधन कुमार डी।

क्या आप प्रति किरायेदार अलग अलग ClientId / ClientSecret सेटिंग्स रखना चाहते हैं? या क्या आप केवल किरायेदार के आधार पर विभिन्न योजनाओं को जोड़ना चाहते हैं?
कर्क लर्किन

@KirkLarkin संबंधित किरायेदार के ग्राहक के साथ विभिन्न योजनाएं / गुप्त। नीचे की तरह, अगर (tenant.hasMicrosoft) {प्रमाणीकरण .ddMicrosoftAccount (विकल्प => {विकल्प .ClientId = "clientid"; option.ClientSecret = "clientecret"; option.StTokens = true;}); }
माधवन कुमार डी

इस पर किसी भी अद्यतन?
मधन कुमार डी।

जवाबों:


3

आधिकारिक एमएस डॉक्स, किरायेदार प्रति प्रमाणीकरण प्रदाता देखें

ASP.NET कोर ढांचे में बहु-किरायेदार प्रमाणीकरण के लिए एक अंतर्निहित समाधान नहीं है। हालांकि ग्राहकों के लिए एक लिखना संभव है, अंतर्निहित सुविधाओं का उपयोग करते हुए, हम ग्राहकों को इस उद्देश्य के लिए ऑर्चर्ड कोर में देखने की सलाह देते हैं ।


0

चूंकि डीआई पंजीकरण के दौरान प्रमाणीकरण को कॉन्फ़िगर करने की आवश्यकता होती है, इसलिए आपको प्रमाणीकरण के पंजीकरण के दौरान सभी बाहरी लॉगिन प्रदाताओं को सामान्य रूप से सेटअप करना होगा।

उस चरण के दौरान, आपको सभी योजनाओं को जोड़ना होगा। एक स्कीम में एक निश्चित क्लाइंट-आईडी / सीक्रेट होता है, इसलिए आपको सभी बाहरी लॉगिन प्रदाता क्रेडेंशियल्स के साथ अपने आइडेंटिटी सेवर को बूटस्ट्रैप करना होगा, जिसे आप अपने सभी क्लाइंट के लिए सपोर्ट करते हैं। योजना का नाम अद्वितीय होना चाहिए।

उदाहरण के रूप में, किरायेदार A में "A_microsoft" स्कीम हो सकती है, Tenant B में स्कीम "B_microsoft" हो सकती है, आदि।

तब आप उन प्रमाणीकरण योजनाओं का उल्लेख कर सकते हैं, जब IdentityServer में कॉलिंग के तरीके। SignIn, Challenge, SignOut आदि।

ज्ञात हो, कि इसके लिए किरायेदारों के संपूर्ण सेट को बूटस्ट्रैपिंग की आवश्यकता होगी। आपके परिदृश्य के आधार पर, यदि किरायेदारों को नियमित रूप से अपडेट किया जाता है, तो उन्हें नए प्रमाणीकरण योजनाओं के बारे में जानने के लिए IdentityServer के नियमित पुनरारंभ की भी आवश्यकता होगी।


यदि यह समस्या है, तो आप शायद किसी भी तरह से पहचान प्रमाणीकरण के दौरान पंजीकृत प्रमाणीकरण योजनाओं को बढ़ा सकते हैं, लेकिन यह आसान नहीं होगा। यह AspNetCore के साथ आने वाले प्रमाणीकरण मिडलवेयर के बड़े कस्टम कार्यान्वयन की आवश्यकता हो सकती है।


0

क्या आपका मतलब है कि आप कई प्रामाणिक प्रदाता के लिए समर्थन जोड़ना चाहते हैं? यह दस्तावेज़ पहले से ही निर्दिष्ट करता है कि कॉन्फ़िगर सेवा में कई एकाधिक प्रदाता कैसे जोड़ें। app.UseXXXपाइप लाइन को स्वयं कॉन्फ़िगर करने के लिए अब और उपयोग करने की आवश्यकता नहीं है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.