在ASP.NET身份中获取使用Microsoft帐户进行身份validation的用户的电子邮件

我正在使用VS2013中新的MVC 5模板附带的ASP.NET标识。 我已配置外部登录提供商,以便人们可以使用Google,Facebook或Microsoft注册。 但是,我仍然希望获得人们的电子邮件地址(例如,用于通知,更新等)。

默认情况下, app.UseGoogleAuthentication()也会请求用户的电子邮件地址。 对于Facebook,我创建了一个新的FacebookAuthenticationOptions类实例,并添加了以下范围: facebook.Scope.Add("email") 。 这也有效。

我在使用Microsoft帐户的人收到电子邮件时遇到问题。 MicrosoftAccountAuthenticationOptions还具有Scope属性,但添加email似乎不起作用。 在文档中,我看到有一个范围wl.emails但它返回一组电子邮件地址,我不确定这是否等同于Facebook的email

有人建议如何在validation时将电子邮件地址作为索赔吗?

  1. 配置Microsoft的范围。

     var mo = new MicrosoftAccountAuthenticationOptions { Caption = "Live", ClientId = clientId, ClientSecret = clientSecret, }; mo.Scope.Add("wl.basic"); mo.Scope.Add("wl.emails"); app.UseMicrosoftAccountAuthentication(mo); 
  2. 抓住电子邮件声明

     var identity = await AuthenticationManager.AuthenticateAsync(DefaultAuthenticationTypes.ExternalCookie); var emailClaim = identity.Identity.FindFirst(ClaimTypes.Email); 

希望这对你有所帮助。

 app.UseMicrosoftAccountAuthentication(new MicrosoftAccountAuthenticationOptions() { ClientId = "Your_client_id", ClientSecret = "your_client_secret_key", Scope = { "wl.basic", "wl.emails" } }); 

并收到电子邮件

  var externalIdentity = HttpContext.GetOwinContext().Authentication.GetExternalLoginInfoAsync(); string email=externalIdentity.Result.Email;