我在.NET WebAPI项目中使用JwtBearerAuthentication Katana中间件来通过JWT保护我的Web API。
所以,在我的Startup课程中,我只是做了一些简单的事情:
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = new[] { audience },
IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
{
new SymmetricKeyIssuerSecurityTokenProvider(issuer, secret)
}
});
一切都很好,但有一个例外。
当客户端传入无效或丢失的承载令牌时,WWW-Authenticate响应头只是“Bearer”。
我想自定义该标头,以包含我的授权服务器的地址和支持的授权类型。
更像是:WWW-Authenticate:MyAuth href = url,grant_type =“supported-grants”或者其他......
最好的方法是什么?我很惊讶JwtBearerAuthenticationOptions类不包含Challenge属性。我可以解决这个问题,但想知道Jwt中间件是否存在最佳实践。
答案 0 :(得分:2)
我们最终在OAuthBearerAuthenticationProvider中使用OnApplyChallenge插入了我们想要的值的WWW-Authenticate标头。
有些事情:
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions ...
Provider = new OAuthBearerAuthenticationProvider()....
OnApplyChallenge = (context) => context.OwinContext.Response.Headers.AppendValue(WWWAuthenticateHeader,values)