Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取使用ASP.NET标识中的Microsoft帐户进行身份验证的用户的电子邮件_C#_Asp.net_Asp.net Identity - Fatal编程技术网

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

C# 获取使用ASP.NET标识中的Microsoft帐户进行身份验证的用户的电子邮件,c#,asp.net,asp.net-identity,C#,Asp.net,Asp.net Identity,我使用的是VS2013中新MVC5模板附带的ASP.NET标识。我已经配置了外部登录提供商,因此人们可以使用谷歌、Facebook或微软注册。但是,我仍然希望获得人们的电子邮件地址(例如通知、更新等) 默认情况下,app.UseGoogleAuthentication()还将请求用户的电子邮件地址。对于Facebook,我创建了一个新的FacebookAuthenticationOptions类实例,并添加了以下作用域:Facebook.scope.Add(“email”)。这也行得通 我在为使

我使用的是VS2013中新MVC5模板附带的ASP.NET标识。我已经配置了外部登录提供商,因此人们可以使用谷歌、Facebook或微软注册。但是,我仍然希望获得人们的电子邮件地址(例如通知、更新等)

默认情况下,
app.UseGoogleAuthentication()
还将请求用户的电子邮件地址。对于Facebook,我创建了一个新的
FacebookAuthenticationOptions
类实例,并添加了以下作用域:
Facebook.scope.Add(“email”)
。这也行得通

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

是否有人建议在进行身份验证时如何获取电子邮件地址作为声明

  • 为Microsoft配置作用域

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

    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;
    

    在Windows帐户中,您有一个邮件列表,而不仅仅是一封唯一的邮件。这是一个包含帐户别名的电子邮件列表。你无法获得更多信息。这不再有效。添加scope语句会导致Microsoft登录页上显示以下错误消息:AADSTS70011:为输入参数“scope”提供的值无效。作用域wl.basic wl.emails无效。@DavidWGray我切换到.NET Core,因为那里的一切都按预期工作。这不再工作了。添加scope语句会导致Microsoft登录页上显示以下错误消息:AADSTS70011:为输入参数“scope”提供的值无效。作用域wl.basic wl.emails无效。