已在Fiddler with Azure AD中拒绝获取此请求的授权

已在Fiddler with Azure AD中拒绝获取此请求的授权,azure,asp.net-web-api,azure-active-directory,fiddler,Azure,Asp.net Web Api,Azure Active Directory,Fiddler,我已经创建了一个ASP.Net Web API(.Net Framework)应用程序,其身份验证类型为“工作或学校帐户”。这会自动在我的Azure订阅中注册此API应用程序,我可以在下看到它。我可以看到主页Url指向。我可以看到API是在本地主机地址上本地启动的。然后,我启动Fiddler从Azure AD获取访问令牌。我将请求发布到端点https://login.microsoftonline.com/.onmicrosoft.com/oauth2/token。具有以下4个参数 grant_

我已经创建了一个ASP.Net Web API(.Net Framework)应用程序,其身份验证类型为“工作或学校帐户”。这会自动在我的Azure订阅中注册此API应用程序,我可以在下看到它。我可以看到主页Url指向。我可以看到API是在本地主机地址上本地启动的。然后,我启动Fiddler从Azure AD获取访问令牌。我将请求发布到端点
https://login.microsoftonline.com/.onmicrosoft.com/oauth2/token
。具有以下4个参数

grant_type=client_credentials
&client_id=<appid from Azure AD Portal>
&client_secret=<secret from Azure AD Portal>
&resource=<appid from Azure AD Portal>
grant\u type=客户端\u凭据
&客户识别码=
&客户机密=
&资源=
我拿回一张代币。当我解码此令牌时,我看到
aud
appid
与预期一致(与Azure AD中的appid匹配)。我使用这个令牌作为承载令牌,通过在GET请求中添加
Authorization:bearer
头来调用API调用
https://localhost:44374/api/values
。但是,此对my API的GET调用将返回我
{“消息”:“此请求的授权已被拒绝。”}
错误消息


我缺少什么?

您应该使用
应用程序ID URI
作为获取令牌时的
资源
值,您可以在azure portal中api应用程序的
属性
中找到
应用程序ID URI
,如。Web api将检查访问令牌中的
aud
声明是否与您在Web.config中设置的声明匹配:

app.UseWindowsAzureActiveDirectoryBearerAuthentication(
                new WindowsAzureActiveDirectoryBearerAuthenticationOptions
                {
                    Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
                    TokenValidationParameters = new TokenValidationParameters {
                         ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
                    },
                });

ida:academy
web.config中的值是允许的访问群体。

!就这样<代码>资源应匹配
ida:acquisition
API配置值。之前,我的API配置值使用URI
https://xxxxx.onmicrosoft.com/WebApplicationName
我将
clientid
作为我的
资源传递。只要这两种价值观是一致的,它们就会起作用。即在WEB API配置中使用<代码> APP ID URI < /代码>以及<代码>资源< /代码>或使用<代码> clitsIdI/<代码>作为Web API配置值和<代码>资源< /代码>。如果答案是有用的,请考虑接受回答,这将帮助其他遇到相同问题的人。我仍然收到相同的错误。我注册了一个Web应用程序,我已经授予了对我的Web API的访问权限(我也注册了这个),但使用上述解决方案,仍然给我相同的错误。只有一件事,我使用的是我的Web应用程序的客户端id和密钥,而不是我的Web API。对吗?请帮助我,因为这个问题现在已经升级。提前谢谢!