使用WebAPI中的Jwt Bearer Authentication中间件自定义WWW-Authenticate质询头

时间:2015-01-07 15:21:03

标签: asp.net-web-api asp.net-web-api2 identity jwt www-authenticate

我在.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中间件是否存在最佳实践。

1 个答案:

答案 0 :(得分:2)

我们最终在OAuthBearerAuthenticationProvider中使用OnApplyChallenge插入了我们想要的值的WWW-Authenticate标头。

有些事情:

app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions ...
   Provider = new OAuthBearerAuthenticationProvider()....
      OnApplyChallenge = (context) => context.OwinContext.Response.Headers.AppendValue(WWWAuthenticateHeader,values)