我有一个针对AAD进行身份验证的Asp.Net Core 2.0 WebApi:
services.AddAuthentication(options => { options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; })
.AddJwtBearer(options =>
{
options.Authority = "https://login.microsoftonline.com/TENANT.onmicrosoft.com";
options.Audience = "CLIENT_ID";
});
我的SPA应用从AAD获取令牌并将其作为bearer
标头发送。一切正常。
我在Azure Scheduler中创建了一个Job并设置Active Directory OAuth
:
运行作业后,我收到此错误:Bearer error="invalid_token", error_description="The audience is invalid"
。
当我将options.Audience
中的AddJwtBearer(...)
设置为https://management.core.windows.net/
时,作业有效但SPA无效。
我想,我需要将Audience
设置为数组['CLIENT_ID', "https://management.core.windows.net/"]
,但options.Audience
的类型为string
。如果我根本没有设置Audience
,则Spa和Job都不起作用(401未经身份验证)。将Audience
设置为CLIENT_ID,https://management.core.windows.net/
也不起作用。
有没有办法在AddJwtBearer
中启用多个受众群体?
答案 0 :(得分:36)
我想我遇到了和你一样的问题。为了使其发挥作用,我将观众从options
移至TokenValidationParameters
,后者接受多个条目。检查以下代码:
.AddJwtBearer(options =>
{
options.Authority = "https://login.windows.net/trades.no";
options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
{
ValidateIssuer = true,
ValidAudiences = new List<string>
{
"AUDIENCE1",
"AUDIENCE2"
}
};