我已经在该站点实现了所有步骤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。
有没有人知道我可能会缺少什么?我离这儿很近。
答案 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