Согласно этому документу , JwtBearerEvents поддерживает только 4 вида событий ниже
- OnAuthenticationFailed (это срабатывает только после того, как токен не прошел аутентификацию, в вашем случае, я думаю, вам нужна проверка вместо аутентификации)
- OnChallenge
- OnMessageReceived
- OnTokenValidated (этот, однако, срабатывает только после успешной проверки токена, поэтому я думаю, что он не работает для ваш случай)
То, что вы хотите, должно быть что-то вроде OnTokenValidateFailed, но его там нет, одним из обходных путей будет регистрация событий OnMessageReceived и попытка проверить токен там
services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.Audience = "api1";
options.Events=new JwtBearerEvents(){
OnMessageReceived =context=>{
var header =context.Request.Headers["Authorization"];
//Your validation logic here
//if validate failed
//{
//context.Response.StatusCode=401;
//}
return Task.CompletedTask;
}
};
});
This вы можете проверить токен самостоятельно, однако этот подход может не привести к короткому замыканию всего конвейера запросов и может конфликтовать с другим промежуточным программным обеспечением (не тестировалось с другим промежуточным программным обеспечением, но я предполагаю, что это может произойти)
Добавить ниже со de в вашем Config of start.cs в вашем проекте API
app.Use(async(context,next)=>{
var authHeader=context.Request.Headers["Authorization"];
//Your validation here
if(validation failed)
{
context.Response.StatusCode=401;
await context.Response.CompleteAsync();
}
else{
await next.Invoke();}
});
Добавьте это перед UseAuthenticate, чтобы перезаписать промежуточное ПО по умолчанию будет запускаться всегда, поскольку он зарегистрирован в ядре промежуточного программного обеспечения ядра asp. net, поэтому вы можете выбрать, какой из них
выбрать.