我已经实现了所有步骤 here以及该站点上的其他教程,以使用 AngularJS 和 WebAPI 在我的应用程序中发布和使用 Jwt。在我的 Startup.cs 中,当存在 AuthorizeAttribute
时,我调用以下函数告诉应用程序消费者 Jwt token :
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 token ,以 Angular 使用它们并将它们添加到 API 请求中,但我仍然得到 404。我一定是在 Jwt 配置中遗漏了一些东西,所以它没有经过验证,但我没有收到任何错误。
我尝试实现一个客户 AuthorizeAttribute
,并在 IsAuthorized
方法中放置一个断点。您可以看到请求包含 Bearer token ,但 IsAuthorized
返回 false,并且未设置 Principal。
有谁知道我可能遗漏了什么?我离这里很近。
最佳答案
我可能在这里没有足够的信息来正确回答这个问题,但结果是我没有以正确的顺序提交我的 OWIN 配置语句。在 Startup.cs 中,我将 app.UseWebApi(config);
放在配置我的授权模块的代码之前。将 app.UseWebApi(config);
放在配置代码的末尾使其开始工作。
我在 ASP.NET 论坛上更好地提出了这个问题:http://forums.asp.net/p/2070482/5976299.aspx?p=True&t=635803483826595456
关于c# - WebAPI 不尊重授权属性的 Jwt token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33043690/