2013-11-23 7 views
7

Ich benutze mvc5 + C# und ich gebe meinem Benutzer die Möglichkeit, mit externen Login (Facebook, Google, ...) auf meiner Website einzuloggen.Erhalten Sie die E-Mail-Adresse des Microsoft Live-Kontos

Ich versuche, Microsoft Live als neuer Anbieter hinzuzufügen. Aber ich sehe keine Option, um die E-Mail-Adresse des verbundenen Benutzers zu erhalten.

Ich erhalte diese Behauptungen wenn some-microsoft-Benutzer verbinden („KEY | VALUE“):

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 | ************************************************************** 

Es gibt jede Möglichkeit, die E-Mail-Adresse des Benutzers zu erhalten, diese Informationen verwenden?

+0

Kurze Antwort: [no] (http://stackoverflow.com/questions/3170341/does-hotmail-or-windows-live-id-support-openid-authentication/6990971#6990971) – Bora

+0

Im Gegensatz zu Forenseiten, wir Verwenden Sie nicht "Danke" oder "Jede Hilfe geschätzt" oder Unterschriften auf [so]. Siehe "[Sollen 'Hallo', 'Danke', 'Slogans' und 'Anrede' aus Posts entfernt werden?] (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be -removed-from-posts) –

Antwort

12

Ja, gibt es. Nach mehreren Stunden versuchen, gelang es mir, wie dies zum Laufen bringen es:

-Code in 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); 

-Code in AccountController.cs, in Funktion ExternalLoginCallback die E-Mail-Adresse abgerufen werden:

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

Tolle Antwort, leider ist mein Projekt in MVC4 und wir benutzen OWin nicht, aber Oauth, also hast du eine ähnliche Lösung für Oauth? – Jay

0

Für alle in diesem Thema läuft mit dem Hinzufügen einer Microsoft Login auf Ihrer Website:

fand ich, dass ich nur die E-Mail-Adresse erhalten kann meine Microsoft Work/Schulkonto. Ich habe einen Microsoft-Account mit meiner @ gmail.com-Adresse und einen mit @ outlook.com erstellt. Beide haben keine E-Mail-Informationen zugeordnet, wenn ich ihre Informationen abfrage. Doch für die qualifizierten Adressen können Sie E-Mail-Informationen erhalten, indem eine GET-Anfrage zu tun zu:

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

Wo access_token ist das, was ein authentifizierter Benutzer zu Ihnen * bieten. Weitere Informationen zu dieser API finden Sie unter folgendem Link: https://msdn.microsoft.com/en-us/library/office/dn659736.aspx

Grundsätzlich erhalten Sie durch einen Aufruf der Microsoft Live API (apis.live.net) die Informationen, auf die der Benutzer Ihnen Zugriff gewährt hat (z Wenn Sie den Bereich wl.emails in Ihrer App aktiviert haben, sollten Sie deren E-Mail-Adresse sehen).

* Wenn sich ein Benutzer mit einem Microsoft-Login an Ihrer Site anmeldet, verfügen seine Anforderungen an Ihre Site alternativ über einen Header, der sowohl das Zugriffstoken als auch die E-Mail-Adresse enthält (die E-Mail-Adresse befindet sich unter der Überschrift "X-MS -CLIENT-PRINCIPAL-NAME ", das Zugriffstoken befindet sich auch in den HTTP-Headern unter" X-MS-TOKEN-MICROSOFT-ACCESS-TOKEN ").

Verwandte Themen