在MVC项目中使用微软账号认证时如何获取用户邮箱?
How do I get the user's email when using Microsoft Account Authentication in an MVC project?
我修改了 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 和 email 的范围组合 似乎有效。但是,范围 openid 对于我正在尝试做的事情来说太过分了。也就是说,我认为向用户要求太多了。范围 email 本身是行不通的。
这特别奇怪,因为 Visual Studio 设置的模板假定外部身份验证提供商将提供电子邮件地址。
如何只获取用户的电子邮件?
对于上下文,我使用了以下文档:
https://developer.microsoft.com/en-us/graph/docs/concepts/permissions_reference#openid-permissions 给人的印象是我希望 email 和 profile 包含在范围内。但是,它继续说明默认情况下包含它们。
我正在尝试使用以下文档在我的 MVC 项目中实施外部身份验证:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/microsoft-logins。
您可以使用以下代码获取用户的电子邮件地址。
ClaimsPrincipal.Current.FindFirst(ClaimTypes.Name).Value.Split('#')[ClaimsPrincipal.Current.FindFirst(ClaimTypes.Name).Value.Split('#').Length - 1];
尝试添加作用域:
MicrosoftAccountAuthenticationOptions mo = new MicrosoftAccountAuthenticationOptions()
{
ClientId = "My Client ID",
ClientSecret = "My Client Secret",
};
mo.Scope.Add("openid");
mo.Scope.Add("email");
app.UseMicrosoftAccountAuthentication(mo);
看来您必须使用 ASP.Net 核心 Web 应用程序 (.Net Framework) 来获取电子邮件。代码类似,但 注意:MicrosoftAccountOptions 而不是 MicrosoftAccountAuthenticationOptions.
app.UseMicrosoftAccountAuthentication(new MicrosoftAccountOptions()
{
ClientId = "My Client ID",
ClientSecret = "My Client Secret"
});
有趣的是,这不会通知用户您正在获取他们的电子邮件地址。我有 Google、Facebook、Twitter、Microsoft 和 LinkedIn 在工作。现在使用 AccountKit 进行电子邮件和短信登录。
我修改了 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 和 email 的范围组合 似乎有效。但是,范围 openid 对于我正在尝试做的事情来说太过分了。也就是说,我认为向用户要求太多了。范围 email 本身是行不通的。
这特别奇怪,因为 Visual Studio 设置的模板假定外部身份验证提供商将提供电子邮件地址。
如何只获取用户的电子邮件?
对于上下文,我使用了以下文档: https://developer.microsoft.com/en-us/graph/docs/concepts/permissions_reference#openid-permissions 给人的印象是我希望 email 和 profile 包含在范围内。但是,它继续说明默认情况下包含它们。
我正在尝试使用以下文档在我的 MVC 项目中实施外部身份验证:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/microsoft-logins。
您可以使用以下代码获取用户的电子邮件地址。
ClaimsPrincipal.Current.FindFirst(ClaimTypes.Name).Value.Split('#')[ClaimsPrincipal.Current.FindFirst(ClaimTypes.Name).Value.Split('#').Length - 1];
尝试添加作用域:
MicrosoftAccountAuthenticationOptions mo = new MicrosoftAccountAuthenticationOptions()
{
ClientId = "My Client ID",
ClientSecret = "My Client Secret",
};
mo.Scope.Add("openid");
mo.Scope.Add("email");
app.UseMicrosoftAccountAuthentication(mo);
看来您必须使用 ASP.Net 核心 Web 应用程序 (.Net Framework) 来获取电子邮件。代码类似,但 注意:MicrosoftAccountOptions 而不是 MicrosoftAccountAuthenticationOptions.
app.UseMicrosoftAccountAuthentication(new MicrosoftAccountOptions()
{
ClientId = "My Client ID",
ClientSecret = "My Client Secret"
});
有趣的是,这不会通知用户您正在获取他们的电子邮件地址。我有 Google、Facebook、Twitter、Microsoft 和 LinkedIn 在工作。现在使用 AccountKit 进行电子邮件和短信登录。