我已经创建了一个ASP.Net Web API(.Net Framework)应用程序,其中包含“工作或学校帐户”作为身份验证类型。这会自动在Azure订阅中注册此API应用程序,我可以在"App Registrations"下看到它。我可以看到主页的Url正指向localhost address。我可以看到API在localhost地址上本地启动。然后,我启动Fiddler以从Azure AD获取访问令牌。我的POST请求到端点https://login.microsoftonline.com/<mytenant>.onmicrosoft.com/oauth2/token
。有以下4个参数获取授权Azure AD的Fiddler拒绝了此请求
grant_type=client_credentials
&client_id=<appid from Azure AD Portal>
&client_secret=<secret from Azure AD Portal>
&resource=<appid from Azure AD Portal>
我得到一个令牌回来。当我解码这个令牌时,我预计会看到aud
和appid
(匹配Azure AD中的appid)。我使用此令牌作为不记名令牌,通过将GET请求中的Authorization: Bearer <mytoken>
头添加到https://localhost:44374/api/values
来调用API调用。但是,对我的API的GET调用返回了我的错误消息{"Message":"Authorization has been denied for this request."}
。
我错过了什么?
是!就是这样! 'resource'应该匹配'ida:Audience' API配置值。此前,我的API配置值使用URI“https:// xxxxx.onmicrosoft.com/WebApplicationName”,并且我将'clientid'作为我的'资源'传递。只要两个值一致,这两个值都可以工作。即在Web API配置中使用'App ID URI'以及'resource'或使用'client_id'作为Web API配置值和'resource' – Mahesh
如果答案有帮助,请考虑接受为答案,这将有助于其他人问题。 –