C# 获取使用ASP.NET标识中的Microsoft帐户进行身份验证的用户的电子邮件
我使用的是VS2013中新MVC5模板附带的ASP.NET标识。我已经配置了外部登录提供商,因此人们可以使用谷歌、Facebook或微软注册。但是,我仍然希望获得人们的电子邮件地址(例如通知、更新等) 默认情况下,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”)。这也行得通 我在为使
app.UseGoogleAuthentication()
还将请求用户的电子邮件地址。对于Facebook,我创建了一个新的FacebookAuthenticationOptions
类实例,并添加了以下作用域:Facebook.scope.Add(“email”)
。这也行得通
我在为使用Microsoft帐户的人获取电子邮件时遇到问题。MicrosoftAccountAuthenticationOptions
也有一个范围
属性,但是添加电子邮件
似乎不起作用。在“我看到”中有一个作用域wl.emails
,但它返回一个电子邮件地址数组,我不确定这是否等同于Facebook的email
是否有人建议在进行身份验证时如何获取电子邮件地址作为声明
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无效。