2

我在 .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 响应标头只是“承载”。

我想自定义该标头以包含我的授权服务器的地址和支持的授权类型。

更像是: WWW-Authenticate: MyAuth href=url,grant_type="supported-grants" 或其他...

做这个的最好方式是什么?我很惊讶 JwtBearerAuthenticationOptions 类不包含 Challenge 属性。我可以解决这个问题,但想知道 Jwt 中间件是否有最佳实践。

4

1 回答 1

2

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

类似于以下内容:

app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions ...
   Provider = new OAuthBearerAuthenticationProvider()....
      OnApplyChallenge = (context) => context.OwinContext.Response.Headers.AppendValue(WWWAuthenticateHeader,values)
于 2015-03-02T14:52:39.817 回答