2013-11-23 10 views
7

का ईमेल पता प्राप्त करें मैं एमवीसी 5 + सी # का उपयोग कर रहा हूं और मैं अपने उपयोगकर्ता को बाहरी लॉगिन (फेसबुक, गूगल, ...) के साथ अपनी वेबसाइट पर लॉग-इन करने का विकल्प देता हूं।माइक्रोसॉफ्ट लाइव अकाउंट

मैं माइक्रोसॉफ्ट लाइव को नए प्रदाता के रूप में जोड़ने की कोशिश कर रहा हूं। लेकिन, मुझे कनेक्ट किए गए उपयोगकर्ता का ईमेल पता प्राप्त करने के लिए कोई विकल्प नहीं दिख रहा है।

मैं उन दावों को हो रही है जब कुछ-माइक्रोसॉफ्ट उपयोगकर्ता कनेक्ट है ("कुंजी | मूल्य"):

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier | ***************** 
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name | test 
http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider | ASP.NET Identity 
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier | ************** 
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name | **************** 
urn:microsoftaccount:id | **************** 
urn:microsoftaccount:name | **************** 
urn:microsoftaccount:access_token | ************************************************************** 

वहाँ, उपयोगकर्ता का ईमेल पता पाने के लिए इस जानकारी का उपयोग किसी भी विकल्प हैं?

+0

संक्षिप्त उत्तर: [नहीं] (http://stackoverflow.com/questions/3170341/does-hotmail-or-windows-live-id-support-openid-authentication/6990971#6990971) – Bora

+0

फ़ोरम साइट्स के विपरीत, हम "धन्यवाद", या "किसी भी मदद की सराहना की", या हस्ताक्षर [so] का उपयोग न करें। देखें "[चाहिए 'हाय', 'धन्यवाद,' टैगलाइन, और नमस्कार पदों से हटा दिए जाएंगे?] (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be -प्रमुख-से-पोस्ट) –

उत्तर

12

हां, वहां हैं।

: ईमेल पता पुनः प्राप्त करने के समारोह ExternalLoginCallback में startup.Auth.cs

var ms = new Microsoft.Owin.Security.MicrosoftAccount.MicrosoftAccountAuthenticationOptions(); 
ms.Scope.Add("wl.emails"); 
ms.Scope.Add("wl.basic"); 
ms.ClientId = "xxxxxxxxxxxxxxxxxxxxxx"; 
ms.ClientSecret = "yyyyyyyyyyyyyyyyyyyyy"; 
ms.Provider = new Microsoft.Owin.Security.MicrosoftAccount.MicrosoftAccountAuthenticationProvider() 
{ 
    OnAuthenticated = async context => 
    { 
     context.Identity.AddClaim(new System.Security.Claims.Claim("urn:microsoftaccount:access_token", context.AccessToken)); 

     foreach (var claim in context.User) 
     { 
      var claimType = string.Format("urn:microsoftaccount:{0}", claim.Key); 
      string claimValue = claim.Value.ToString(); 
      if (!context.Identity.HasClaim(claimType, claimValue)) 
       context.Identity.AddClaim(new System.Security.Claims.Claim(claimType, claimValue, "XmlSchemaString", "Microsoft")); 
     } 
    } 
}; 

app.UseMicrosoftAccountAuthentication(ms); 

AccountController.cs में कोड में

संहिता,: मैं कामयाब कोशिश कर के कई घंटे के बाद इसे इस तरह से काम कर रहा करने के लिए

string Email = string.Empty; 

var externalIdentity = await AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie); 
var emailClaim = externalIdentity.Claims.FirstOrDefault(x => x.Type.Equals(
                "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", 
                StringComparison.OrdinalIgnoreCase)); 
Email = emailClaim == null ? null : emailClaim.Value; 
+0

ग्रेट उत्तर, दुर्भाग्यवश मेरे लिए मेरी परियोजना एमवीसी 4 में है और हम ओविन लेकिन ओथ का उपयोग नहीं कर रहे हैं, तो आपके पास ओथ के लिए एक समान समाधान है? – Jay

0

आपकी साइट के लिए एक Microsoft लॉगिन जोड़ने के साथ इस मुद्दे में चल रहे किसी के लिए:

मैंने पाया कि मैं केवल का ईमेल पता प्राप्त कर सकते हैं मेरे माइक्रोसॉफ्ट वर्क/स्कूल खाता। मैंने अपने @ gmail.com पते और एक @ outlook.com के साथ एक माइक्रोसॉफ्ट खाता बनाया है। जब मैं उनकी जानकारी पूछता हूं तो दोनों में कोई ईमेल जानकारी नहीं होती है। हालांकि, पात्र पतों के लिए, आप ईमेल जानकारी के लिए GET अनुरोध करके प्राप्त कर सकते हैं:

https://apis.live.net/v5.0/me?access_token=ACCESS_TOKEN

ACCESS_TOKEN कहां है कि जो एक प्रमाणीकृत उपयोगकर्ता आप के लिए प्रदान करेगा *। इस एपीआई के बारे में अधिक जानकारी के लिए, आप यह लिंक देख सकते हैं: https://msdn.microsoft.com/en-us/library/office/dn659736.aspx

असल में, माइक्रोसॉफ्ट लाइव एपीआई (apis.live.net) पर कॉल करने से आपको वह जानकारी मिल जाएगी जो उपयोगकर्ता ने आपको एक्सेस दी है (इसलिए यदि आपने अपने ऐप में wl.emails स्कोप सक्षम किया है, तो आपको उनका ईमेल पता देखना चाहिए)।

* वैकल्पिक रूप से, जब कोई उपयोगकर्ता आपकी साइट में माइक्रोसॉफ्ट लॉगिन के साथ लॉग इन करता है, तो आपकी साइट पर उनके अनुरोधों में एक शीर्षलेख होगा जिसमें पहुंच टोकन और संभवत: उनके ईमेल पते (ईमेल पता शीर्षलेख के नीचे है) एक्स-एमएस -CLIENT-PRINCIPAL-NAME ", एक्सेस टोकन HTTP शीर्षकों में" एक्स-एमएस-टोकन-माइक्रोसॉफ़्ट-एक्सेस-टोकन "के तहत भी है)।

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