如何在 Asp.Net Core 2.0“AddJwtBearer”中间件中设置多个受众?
Posted
技术标签:
【中文标题】如何在 Asp.Net Core 2.0“AddJwtBearer”中间件中设置多个受众?【英文标题】:How to set multiple audiences in Asp.Net Core 2.0 "AddJwtBearer" middleware? 【发布时间】:2018-04-09 23:20:04 【问题描述】:我有一个针对 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 调度程序中创建了一个作业并设置了Active Directory OAuth
:
运行作业后出现此错误:Bearer error="invalid_token", error_description="The audience is invalid"
。
当我将AddJwtBearer(...)
中的options.Audience
设置为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
中启用多个受众?
【问题讨论】:
【参考方案1】:我想我遇到了和你一样的问题。为了让它发挥作用,我将观众从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"
;
【讨论】:
这正是我想要的。作品。谢谢。 感谢这个帮助,它可能有助于人们了解何时需要这些配置设置,具体取决于是否为我的组织、任何组织或任何组织或消费者登录设置了应用注册身份验证,如中所述***.com/questions/53966951/… 你能看看***.com/questions/55606855/…中提到的场景吗以上是关于如何在 Asp.Net Core 2.0“AddJwtBearer”中间件中设置多个受众?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET Core 2.0 Razor 页面中填充下拉列表
如何在 Asp.Net Core 2.0“AddJwtBearer”中间件中设置多个受众?
如何在 asp.net core v 2.0 中从 javascript 调用 PageModel 方法