0

我正在努力更新我们的 API(核心 3.1)身份验证,以使用最新的 Microsoft Identity nuget 与 MSAL 一起用于 Angular UI 应用程序。我们有 Azure 函数,它们将使用托管服务标识调用我们的 API,并为每个 API 设置了几个新的应用程序注册,以便在 Angular 中与 MSAL 一起使用。我们从 Azure 函数调用的相同 API 也将从 Angular UI 调用。我遇到的问题是我需要接受最多四个不同的受众,以免破坏所有内容的身份验证。

需要的观众:

  1. API 的客户端 ID
  2. https://management.azure.com/微星
  3. https://management.core.windows.net/微星
  4. 我们用于生成用于自动化测试的令牌的另一个应用程序注册的客户端 ID 我正在尝试在列表中设置受众,如下所示:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(options => { }, options =>
{
options.Authority = Configuration["Authentication:Jwt:Authority"];
options.Instance = Configuration.GetSection("AzureAd")["Instance"];
options.ClientId = Configuration.GetSection("AzureAd")["ClientId"];
options.Domain = Configuration.GetSection("AzureAd")["Domain"];
options.TenantId = Configuration.GetSection("AzureAd")["TenantId"];
options.TokenValidationParameters.ValidateAudience = true;

var audience = new List<string>();   
audience.Add(Configuration["AzureAd:ClientId"]);
audience.AddRange(new string[] {"https://management.azure.com/", 
                                    "https://management.core.windows.net/", "other api client id"});
options.TokenValidationParameters.ValidAudiences = audience;

});

当我尝试使用另一个应用程序创建的令牌(#4)通过 Swagger 调用端点时,我收到此错误:

IDX10214:观众验证失败。观众:“System.String”。不匹配:validationParameters.ValidAudience: 'System.String' 或 validationParameters.ValidAudiences: 'System.String'。

在查看事件中的上下文时,我还注意到,当事件触发时,我在运行时设置的任何受众值都不存在。ValidAudience 和 ValidAudiences 都为空。

我需要弄清楚如何在事件中保留这些设置,因为我猜这就是观众验证失败的原因。

4

0 回答 0