使用 WebAPI 中的 Jwt Bearer Authentication 中间件自定义 WWW-Authenticate challenge header
Customize WWW-Authenticate challenge header with Jwt Bearer Authentication middleware in WebAPI
我在 .NET WebAPI 项目中使用 JwtBearerAuthentication Katana 中间件来通过 JWT 保护我的网站 API。
所以,在我的 Startup class 中,我只是在做一些简单的事情,比如:
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = new[] { audience },
IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
{
new SymmetricKeyIssuerSecurityTokenProvider(issuer, secret)
}
});
一切正常,只有一个例外。
当客户端传入无效或丢失的 Bearer 令牌时,WWW-Authenticate 响应 header 只是 "Bearer"。
我想自定义 header 以包括我的授权服务器的地址和支持的授权类型。
更像是:WWW-Authenticate: MyAuth href=url,grant_type="supported-grants" 或其他...
最好的方法是什么?我很惊讶 JwtBearerAuthenticationOptions class 不包含挑战 属性。我可以解决这个问题,但想知道这里是否有关于 Jwt 中间件的最佳实践。
我们最终使用 OAuthBearerAuthenticationProvider 中的 OnApplyChallenge 插入了我们想要的值 WWW-Authenticate header。
大致如下:
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions ...
Provider = new OAuthBearerAuthenticationProvider()....
OnApplyChallenge = (context) => context.OwinContext.Response.Headers.AppendValue(WWWAuthenticateHeader,values)
我在 .NET WebAPI 项目中使用 JwtBearerAuthentication Katana 中间件来通过 JWT 保护我的网站 API。
所以,在我的 Startup class 中,我只是在做一些简单的事情,比如:
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = new[] { audience },
IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
{
new SymmetricKeyIssuerSecurityTokenProvider(issuer, secret)
}
});
一切正常,只有一个例外。
当客户端传入无效或丢失的 Bearer 令牌时,WWW-Authenticate 响应 header 只是 "Bearer"。
我想自定义 header 以包括我的授权服务器的地址和支持的授权类型。
更像是:WWW-Authenticate: MyAuth href=url,grant_type="supported-grants" 或其他...
最好的方法是什么?我很惊讶 JwtBearerAuthenticationOptions class 不包含挑战 属性。我可以解决这个问题,但想知道这里是否有关于 Jwt 中间件的最佳实践。
我们最终使用 OAuthBearerAuthenticationProvider 中的 OnApplyChallenge 插入了我们想要的值 WWW-Authenticate header。
大致如下:
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions ...
Provider = new OAuthBearerAuthenticationProvider()....
OnApplyChallenge = (context) => context.OwinContext.Response.Headers.AppendValue(WWWAuthenticateHeader,values)