我正在尝试使用来自 azure 活动目录的访问令牌来构建一个新的 WebApi。
我正在使用 .net core v3.1 和 Visual Studio 2019。
我使用“Asp.net 核心 Web 应用程序”模板创建了一个新项目并选择了一个“API”项目并将身份验证类型更改为“工作或学校帐户”并将 App ID Url 设置为 Api://Automation/TestApi
然后,Visual Studio 为我搭建了一个带有模拟天气预报服务的 Web API,如果我注释掉 [Authorize] 属性,它会按预期在浏览器中很好地启动。它还在 AzureActive Directory 中为我创建了一个应用程序注册。
恢复 [Authorize] 属性后,我无法从客户端应用程序调用 API,因此我决定使用邮递员调用 API 以查看发生了什么。
我向创建的应用程序注册视觉工作室添加了一个客户端密码,并使用应用程序(客户端)ID 和 api://Automation/TestApi/.default 作为范围将邮递员请求放在一起,如下所示。
这工作正常并返回访问令牌但是当我尝试使用该访问令牌来调用默认的天气预报端点时,我在 WWW-Authenticate 响应标头中收到 HTTP 401 未经授权的错误
"Bearer error="invalid_token", error_description="受众 'api://Automation/TestApi' 无效"
有什么我想念的吗?我找不到任何关于观众应该是什么的线索,也没有明显的控制方法。
As Requested here 是公开 API 屏幕的内容
和我正在使用的解码的 jwt 令牌
更新
我在下面尝试了@CarlZhao 的答案,但它并没有真正起作用。但是我记得我刚才问过一个关于令牌中错误发行者的问题,结果是手动编辑 API 注册中的清单 json 并设置“accessTokenAcceptedVersion”:2
现在我得到了一个以 clientId guid 作为观众的 v2 函数
但是,使用此令牌仍然不起作用!我现在收到有关发行者的错误:
Bearer error="invalid_token", error_description="The issuer 'https://login.microsoftonline.com/{{guid}}/v2.0' is invalid