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

时间:2014-03-06 15:59:24

标签: c# asp.net asp.net-identity

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

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

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

有人建议如何在验证时将电子邮件地址作为声明吗?

2 个答案:

答案 0 :(得分:16)

  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);
    
  3. 希望这会对你有所帮助。

答案 1 :(得分:0)

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;