我有一个角度客户端,该客户端能够进行身份验证并从Azure AD接收令牌。我将令牌添加到标题中,并称为WebAPI。我不断收到以下消息
“该请求的授权已被拒绝。”
我在Angular和Google Postman中遇到此错误。
我从如下角度将令牌添加到标头请求中
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("\tHello World \n");
return (0);
}
从getHeaderWithToken调用中,我确实看到令牌已添加到标题中
this.http.get<T>(endpointUrl, this.getHeaderWithToken());
我还使用了邮递员,单击“授权”选项卡,将令牌粘贴到“令牌”字段中。
两者均返回失败的消息。
在webAPI代码上
我在App_Start文件夹中创建了一个启动文件,我验证了以下代码是否被调用
let token = this.authService.getAccessToken();
let headers = new HttpHeaders({
'Authorization': 'Bearer ' + token,
它已在Azure AD上注册。
此测试应与Google Postman一起使用,对吧?
我正在尝试调用此测试消息以查看我的请求是否有效
public void ConfigureAuth(IAppBuilder app)
{
var azureADBearerAuthOptions = new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ConfigurationManager.AppSettings["TenantId"]
};
azureADBearerAuthOptions.TokenValidationParameters =
new TokenValidationParameters()
{
ValidAudience = ConfigurationManager.AppSettings["Audience"]
};
app.UseWindowsAzureActiveDirectoryBearerAuthentication(azureADBearerAuthOptions);
}
该请求确实在构造函数上中断,但不允许调用此测试方法。是的,它无需[授权]即可工作。
感谢您的帮助。谢谢。
答案 0 :(得分:1)
如果启用中间件来验证令牌,则需要确保正确配置了WindowsAzureActiveDirectoryBearerAuthenticationOptions.Audience
或TokenValidationParameters.AllowedAudience
,并将其与 {{1 }} 属性(来自传入的 aud
令牌)。您可以在浏览应用程序时按F12键并跟踪网络,或使用Fiddler捕获您的承载令牌,然后使用 JWT
来解码令牌。
此外,如果您为后端Web应用程序使用Azure App Service中的内置身份验证和授权,则需要为应用程序服务应用程序的AD authentication under the Authentication / Authorization刀片服务器正确配置客户端ID或允许代币的听众
详细信息,您可以按照Azure AD AngularJS getting started和Integrating Azure AD into an AngularJS单页应用程序的指南来缩小此问题的范围。
希望有帮助。