我创建了一个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>
我收到一个代币。解码此令牌时,我会按预期看到aud
和appid
(在Azure AD中匹配appid)。我使用此令牌作为承载令牌,通过在Authorization: Bearer <mytoken>
的GET请求中添加https://localhost:44374/api/values
标头来调用API调用。但是,对我的API的这个GET调用返回了{"Message":"Authorization has been denied for this request."}
错误消息。
我错过了什么?
答案 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"]
},
});
值是允许的受众。