Azure AD WebAPI返回未授权,即使请求传递了来自Angular客户端的访问令牌

时间:2019-07-22 15:16:01

标签: angular azure-active-directory

我有一个角度客户端,该客户端能够进行身份验证并从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);
    }

该请求确实在构造函数上中断,但不允许调用此测试方法。是的,它无需[授权]即可工作。

感谢您的帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

如果启用中间件来验证令牌,则需要确保正确配置了WindowsAzureActiveDirectoryBearerAuthenticationOptions.AudienceTokenValidationParameters.AllowedAudience,并将其与 {{1 }} 属性(来自传入的 aud 令牌)。您可以在浏览应用程序时按F12键并跟踪网络,或使用Fiddler捕获您的承载令牌,然后使用 JWT 来解码令牌。

此外,如果您为后端Web应用程序使用Azure App Service中的内置身份验证和授权,则需要为应用程序服务应用程序的AD authentication under the Authentication / Authorization刀片服务器正确配置客户端ID或允许代币的听众

详细信息,您可以按照Azure AD AngularJS getting startedIntegrating Azure AD into an AngularJS单页应用程序的指南来缩小此问题的范围。

希望有帮助。