在使用Azure AD的Fiddler中,此请求被拒绝获取授权

时间:2017-07-17 08:51:24

标签: azure asp.net-web-api azure-active-directory fiddler

我创建了一个ASP.Net Web API(.Net Framework)应用程序,其中包含“工作或学校帐户”作为身份验证类型。这会自动在我的Azure订阅中注册此API应用程序,我可以在"App Registrations"下看到它。我可以看到主页网址指向localhost address。我可以看到API是在localhost地址本地启动的。然后,我启动Fiddler以从Azure AD获取访问令牌。我对端点https://login.microsoftonline.com/<mytenant>.onmicrosoft.com/oauth2/token的POST请求。有以下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>

我收到一个代币。解码此令牌时,我会按预期看到audappid(在Azure AD中匹配appid)。我使用此令牌作为承载令牌,通过在Authorization: Bearer <mytoken>的GET请求中添加https://localhost:44374/api/values标头来调用API调用。但是,对我的API的这个GET调用返回了{"Message":"Authorization has been denied for this request."}错误消息。

我错过了什么?

1 个答案:

答案 0 :(得分:4)

获取令牌时,您应该使用var files = DriveApp.searchFiles("title contains '" + inputDate + "'"); 作为App ID URI值,您可以在azure门户网站的resource api app中找到App ID URI,例如{{3} }。 Web api将检查访问令牌中的Properties声明是否与您在web.config中设置的声明匹配:

aud
web.config中的

app.UseWindowsAzureActiveDirectoryBearerAuthentication( new WindowsAzureActiveDirectoryBearerAuthenticationOptions { Tenant = ConfigurationManager.AppSettings["ida:Tenant"], TokenValidationParameters = new TokenValidationParameters { ValidAudience = ConfigurationManager.AppSettings["ida:Audience"] }, }); 值是允许的受众。