Update
我已经能够使用this thread中的指令获得一个Bearer令牌
以下是邮递员的说明:
-
网址:https://login.windows.net/[tenantname].onmicrosoft.com/oauth2/token
-
类型:POST
-
Headers :无
-
正文:表格数据
-
grant_type:client_credentials
-
client_id:[client-id]
-
client_secret:[client-secret]
但是,如果我在调用Web API endpoints 时发送相同的令牌,我仍然会回复“ Authorization has been denied for this request ”
为什么还没有授权?
End Update
我创建了一个ASP.Net Web API项目,该项目使用组织Azure AD实例进行保护 . 我已正确设置了租户ID,客户端ID和密码 .
Azure AD实例与支持Office 365 / SharePoint实例的实例相同,其目的是创建可以使用登录用户的上下文调用服务的SharePoint加载项 .
我坚持测试API . 我可以毫无问题地调用未经授权的 endpoints . 但是,当我添加[Authorize]属性时,我总是收到这个回复:“ Authorization has been denied for this request. ”
据我了解,我需要生成一个不记名令牌并将其添加到 Headers 中的Postman请求中(参见图片) . 经过大量的谷歌搜索,我仍然无法完成这项工作 .
我的问题是:如何为受Azure AD保护的Web API实例生成承载令牌 .
我的配置代码如下:
public void ConfigureAuth(IAppBuilder app)
{
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
TokenValidationParameters = new TokenValidationParameters {
ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
},
});
}
1 回答
首先,您可以使用POSTMAN测试受承载令牌保护的Web api . 这是我的邮递员截图:
POSTMAN sending bearer token to web api
基本上:在请求标头中,将密钥指定为“授权”,并将值指定为“承载[您的令牌” . 如果您遇到错误,请查看响应的 Headers ,您将看到更详细的错误信息 .
请注意,大多数令牌都有一个到期时间,您可以尝试验证您的令牌是否有效 . 例如https://jwt.io/