如何使用 Microsoft.Identity.Web 从 AAD 请求电子邮件范围

How to request email scope from AAD using Microsoft.Identity.Web

我正在尝试做一些我知道如何在 .NET Core 中的 .NET Framework 中做的事情,但缺少一个简单的配置步骤。

.NET 框架:

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
Scope = OpenIdConnectScope.OpenIdProfile + " " + OpenIdConnectScope.Email,
....

在 .NET Core 中,我正在使用 Microsoft.Identity.Web,但在发送 Azure Active Directory 登录请求之前无法找到设置范围的位置。如果我在登录页面出现时手动编辑 URL,我可以通过将电子邮件添加到 URL 查询字符串中的范围来取回电子邮件声明。

这是新应用程序中的 Startup.cs 代码,我认为这是我需要添加范围的地方:

            services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
                .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"));

作为猜测,我尝试在此处将“Scopes”添加到我的应用程序设置中:

  "AzureAd": {
    "Instance": [...]
    "Scopes": "openid profile email"
  },

但这似乎并没有附加任何东西。

阅读 kavyasaraboju-MT 的有用答案后有效的方法:

services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme).AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"));
services.Configure<OpenIdConnectOptions>(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
    options.Scope.Add("email");
});

请检查以下参考资料是否有帮助。

启动配置中(添加电子邮件范围)

services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
    .AddAzureAD(options => Configuration.Bind("AzureAd", options));

services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
    options.Authority += "/v2.0/";
    ..
//we can add scopes this way
options.Scope.Add("openid");
     options.Scope.Add("profile");
     options.Scope.Add("email");
//
…
}

manifest 中,我们可以添加可选声明(用于访问令牌或 ID 令牌)

"optionalClaims": {
        "idToken": [],
        "accessToken": [
            {
                "name": "email",
                "source": null,
                "essential": false,
                "additionalProperties": []
            } ],

授予应用在门户中访问电子邮件、配置文件和 openid 的权限并同意。

并确保登录请求具有必需的范围

&response_type=id_token &scope=openid%20profile%20email

参考这些

  1. asp.net 核心 mvc - 缺少 Azure 应用程序注册的 Azure AD v2 直接分配用户的 ID 令牌中的可选电子邮件声明 - 堆栈内存溢出 溢出
  2. azure active directory - 如何请求额外的用户 配置文件数据(电子邮件地址,) - 堆栈溢出