2017-07-23 8 views
7

मैंने स्टार्टअप.Auth.cs संशोधित किया है ताकि मैं स्कोप जोड़ सकूं। यहां मेरे पास है:एमवीसी प्रोजेक्ट में माइक्रोसॉफ्ट अकाउंट प्रमाणीकरण का उपयोग करते समय मैं उपयोगकर्ता का ईमेल कैसे प्राप्त करूं?

MicrosoftAccountAuthenticationOptions mo = new MicrosoftAccountAuthenticationOptions() 
{ 
    ClientId = "My Client ID", 
    ClientSecret = "My Client Secret", 
}; 
app.UseMicrosoftAccountAuthentication(mo); 

यह मुझे उपयोगकर्ता को प्रमाणीकृत करने की अनुमति देता है।

मैं स्कोप wl.signin जोड़ने की कोशिश की है, wl.emails और wl.contacts_emails। हालांकि, वे निम्न त्रुटि की रिपोर्ट करने के लिए Microsoft लॉगिन पृष्ठ का कारण बनते हैं: AADSTS70011: इनपुट पैरामीटर 'स्कोप' के लिए प्रदत्त मान मान्य नहीं है। दायरा wl.signin, wl.emails, wl.contacts_emails मान्य नहीं है।ओपनिड और ईमेल का दायरा संयोजन काम करने लगता है। हालांकि, स्कोप ओपनिड जो मैं करने की कोशिश कर रहा हूं उसके लिए अधिक है। यही है, मुझे लगता है कि उपयोगकर्ता से पूछना बहुत अधिक है। दायरा ईमेल सब कुछ स्वयं द्वारा काम नहीं करता है।

यह विशेष रूप से अजीब है क्योंकि विजुअल स्टूडियो सेट अप टेम्पलेट मानता है कि बाहरी प्रमाणीकरण प्रदाता एक ईमेल पता प्रदान करेगा।

मैं केवल उपयोगकर्ता का ईमेल कैसे प्राप्त करूं?

संदर्भ के लिए, मैं निम्नलिखित दस्तावेजों का उपयोग कर रहा: https://developer.microsoft.com/en-us/graph/docs/concepts/permissions_reference#openid-permissions जो धारणा है कि मैं ईमेल और प्रोफ़ाइल दायरे में शामिल करना चाहते हैं देता है। हालांकि, यह कहता है कि वे डिफ़ॉल्ट रूप से शामिल हैं।

मैं दस्तावेज़ का उपयोग कर अपने एमवीसी प्रोजेक्ट में बाहरी प्रमाणीकरण को लागू करने की कोशिश कर रहा हूं: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/microsoft-logins

+0

यह एक एएसपी.Net वेब अनुप्रयोग (नेट फ्रेमवर्क) है। मैं पूरी चीज को एएसपी.Net कोर वेब एप्लिकेशन (नेट कोर) के साथ करने जा रहा हूं। इंटरफ़ेस थोड़ा अलग है यानी यह MicrosoftAccountAuthenticationOptions के बजाय MicrosoftAccountOptions का उपयोग करता है। – JSWilson

उत्तर

0

ऐसा लगता है कि ASP.Net कोर वेब अनुप्रयोग (नेट फ्रेमवर्क) उपयोग करने के लिए ईमेल प्राप्त करने के लिए है। कोड समान है लेकिन नोट: MicrosoftAccountAuthenticationOptions के बजाय MicrosoftAccountOptions

app.UseMicrosoftAccountAuthentication(new MicrosoftAccountOptions() 
{ 
    ClientId = "My Client ID", 
    ClientSecret = "My Client Secret" 
}); 

समझदारी से पर्याप्त यह उपयोगकर्ता को सूचित नहीं करता है कि आपको उनका ईमेल पता मिल रहा है। मेरे पास Google, फेसबुक, ट्विटर, माइक्रोसॉफ्ट & लिंक्डइन काम कर रहा है। अब ईमेल और एसएमएस लॉगिन के लिए खाताकिट पर।

0

आप उपयोगकर्ता का ईमेल पता प्राप्त करने के लिए निम्न कोड का उपयोग कर सकते हैं। स्कोप जोड़ने के लिए

ClaimsPrincipal.Current.FindFirst(ClaimTypes.Name).Value.Split('#')[ClaimsPrincipal.Current.FindFirst(ClaimTypes.Name).Value.Split('#').Length - 1]; 
+0

मैंने इसे बाहरी लॉजिक कॉलबैक में उपयोग करने का प्रयास किया। हालांकि, यह कुछ भी वापस नहीं करता है। मुझे लगता है कि अंतर्निहित मुद्दा यह है कि मुझे नहीं पता कि मूल अनुरोध के दायरे में ईमेल कैसे प्राप्त करें।नतीजतन loginInfo में जानकारी नहीं है और मैं इसे दावे प्रिंसिपल.क्यूरेंट में कहीं भी नहीं ढूंढ पा रहा हूं। मैं फेसबुक के दायरे में ईमेल जोड़ने में सक्षम था। Google ने डिफ़ॉल्ट रूप से ईमेल किया था। ट्विटर के मामले में मुझे इसे प्राप्त करने के लिए अपने क्रेडेंशियल सत्यापन API को कॉल करना पड़ा (एक समाधान जो मुझे पसंद नहीं है, लेकिन मुझे ट्विटर से ईमेल प्राप्त करने का कोई अन्य तरीका नहीं पता है)। – JSWilson

1

प्रयास करें:

MicrosoftAccountAuthenticationOptions mo = new MicrosoftAccountAuthenticationOptions() 
{ 
    ClientId = "My Client ID", 
    ClientSecret = "My Client Secret", 
}; 
mo.Scope.Add("openid"); 
mo.Scope.Add("email"); 
app.UseMicrosoftAccountAuthentication(mo); 
+0

प्रश्न में आप ध्यान देंगे कि मैंने कोशिश की है। यह उपयोगकर्ताओं के ईमेल तक पहुंचने की अनुमति मांगता है। हालांकि, ईमेल loginInfo या दावा प्रिंसिपल.क्यूरेंट में वापस नहीं किया गया है। मैं ईमेल कैसे प्राप्त करूं? – JSWilson

+0

फेसबुक और Google लॉगिनInfo में ईमेल वापस कर देते हैं। माइक्रोसॉफ्ट कहां रखता है? – JSWilson

संबंधित मुद्दे

 संबंधित मुद्दे