在MVC项目中使用Microsoft帐户身份验证时如何获取用户的电子邮件?

JSW*_*son 8 c# asp.net-mvc oauth owin

我修改了startup.Auth.cs以便我可以添加范围.这是我有的:

MicrosoftAccountAuthenticationOptions mo = new MicrosoftAccountAuthenticationOptions()
{
    ClientId = "My Client ID",
    ClientSecret = "My Client Secret",
};
app.UseMicrosoftAccountAuthentication(mo);
Run Code Online (Sandbox Code Playgroud)

这允许我验证用户.

我尝试添加范围wl.signin,wl.emailswl.contacts_emails.但是,它们会导致Microsoft登录页面报告以下错误:AADSTS70011:输入参数"scope"的提供值无效.范围wl.signin,wl.emails,wl.contacts_emails无效.openidemail的范围组合似乎有效.但是,openid范围对我正在尝试做的事情来说太过分了.也就是说,我认为从用户那里询问太多了.范围电子邮件全部由它自己不起作用.

这特别奇怪,因为Visual Studio设置的模板假定外部身份验证提供程序将提供电子邮件地址.

我如何只收到用户的电子邮件?

对于上下文,我使用以下文档:https: //developer.microsoft.com/en-us/graph/docs/concepts/permissions_reference#openid-permissions,这给人的印象是我希望范围中包含电子邮件配置文件.但是,它继续声明它们默认包含在内.

我正在尝试使用以下文档在我的MVC项目中实现外部身份验证:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/microsoft-logins.

JSW*_*son 1

看起来您必须使用ASP.Net Core Web 应用程序(.Net Framework)才能获取电子邮件。代码类似,但请注意MicrosoftAccountOptions而不是MicrosoftAccountAuthenticationOptions

app.UseMicrosoftAccountAuthentication(new MicrosoftAccountOptions()
{
    ClientId = "My Client ID",
    ClientSecret = "My Client Secret"
});
Run Code Online (Sandbox Code Playgroud)

有趣的是,这不会通知用户您正在获取他们的电子邮件地址。我可以使用 Google、Facebook、Twitter、Microsoft 和 LinkedIn。现在使用 AccountKit 进行电子邮件和短信登录。