我修改了 startup.Auth.cs ,以便我可以添加范围。这就是我所拥有的:
MicrosoftAccountAuthenticationOptions mo = new MicrosoftAccountAuthenticationOptions()
{
ClientId = "My Client ID",
ClientSecret = "My Client Secret",
};
app.UseMicrosoftAccountAuthentication(mo);
这允许我验证用户。
我尝试添加范围 wl.signin,wl.emails 和 wl.contacts_emails 。但是,它们会导致Microsoft登录页面报告以下错误: AADSTS70011:输入参数“scope”的提供值无效。范围wl.signin,wl.emails,wl.contacts_emails无效。 openid 和电子邮件的范围组合似乎有效。但是,范围 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。
答案 0 :(得分:1)
尝试添加范围:
MicrosoftAccountAuthenticationOptions mo = new MicrosoftAccountAuthenticationOptions()
{
ClientId = "My Client ID",
ClientSecret = "My Client Secret",
};
mo.Scope.Add("openid");
mo.Scope.Add("email");
app.UseMicrosoftAccountAuthentication(mo);
答案 1 :(得分:0)
您可以使用以下代码获取用户的电子邮件地址。
ClaimsPrincipal.Current.FindFirst(ClaimTypes.Name).Value.Split('#')[ClaimsPrincipal.Current.FindFirst(ClaimTypes.Name).Value.Split('#').Length - 1];
答案 2 :(得分:0)
您似乎必须使用 ASP.Net 核心 Web应用程序(.Net Framework)来获取电子邮件。代码类似,但 note : MicrosoftAccountOptions ,而不是 MicrosoftAccountAuthenticationOptions 。
app.UseMicrosoftAccountAuthentication(new MicrosoftAccountOptions()
{
ClientId = "My Client ID",
ClientSecret = "My Client Secret"
});
有趣的是,这并不会通知用户您正在收到他们的电子邮件地址。我有谷歌,Facebook,Twitter,微软和LinkedIn工作。现在开始使用AccountKit进行电子邮件和短信登录。