WebAPI不尊重Jwt标记的authorize属性

时间:2015-10-09 17:04:40

标签: c# asp.net angularjs asp.net-web-api jwt

我已经在该站点实现了所有步骤here和其他教程,以使用AngularJS和WebAPI在我的应用程序中发布和使用Jwt。在我的Startup.cs中,当调用AuthorizeAttribute时,我调用以下函数告诉应用程序消费者Jwt令牌:

    private void ConfigureOAuthTokenConsumption(IAppBuilder app)
    {

        string issuer = MyIssuer;
        string audienceId = MyAudienceID;
        X509Certificate2 cert = GetMyCertificate();

        // Api controllers with an [Authorize] attribute will be validated with JWT
        app.UseJwtBearerAuthentication(
            new JwtBearerAuthenticationOptions
            {
                AuthenticationMode = AuthenticationMode.Active,
                AllowedAudiences = new[] { audienceId },
                IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
                {
                    new X509CertificateSecurityTokenProvider(issuer, cert)
                }
            });
    }

当我运行应用程序时,我可以正常登录,生成Jwt令牌就好了,以角度消耗它们并将它们添加到API请求中,但我仍然得到404.我必须在Jwt配置中丢失一些内容所以它没有得到验证,但我没有收到任何错误。

为了解决这个问题,我尝试实现了一个客户AuthorizeAttribute,并在IsAuthorized方法中添加了一个断点。您可以看到请求包含Bearer令牌,但IsAuthorized返回false,并且未设置Principal。

有没有人知道我可能会缺少什么?我离这儿很近。

1 个答案:

答案 0 :(得分:1)

我可能在这里没有足够的信息来正确回答这个问题,但结果却是因为我没有以正确的顺序提交我的OWIN配置语句。在Startup.cs中,我将app.UseWebApi(config);放在配置我的授权模块的代码之前。将app.UseWebApi(config);放在配置代码的末尾使其开始工作。

我在ASP.NET论坛上更好地提出了这个问题:http://forums.asp.net/p/2070482/5976299.aspx?p=True&t=635803483826595456