Замечательная вещь в Net Core состоит в том, что он встроен. На самом деле вам не нужно проверять токены самостоятельно.Если токен недействителен, ответ автоматически отправляется обратно клиенту.Однако, если вы чувствуете необходимость погрузиться и проверить вручную - вы можете сделать это: https://www.jerriepelser.com/blog/manually-validating-rs256-jwt-dotnet/
Хорошо, так что я выкопал некоторый код из недр одного из моих проектов ... В основномэто позволяет мне подключаться к событиям, которые происходят при проверке токена, и назначать свои собственные четные обработчики различным точкам.
Я считаю, что это то, что вы ищете.
Добавьте этот код вваши регистрации IServiceCollection:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddCustomJwtBearer(options =>
{
options.TokenValidationParameters = tokenParams;
options.Events = ConfigureJwtEvents(tokenConfiguration);
});
И этот код где-то в STATIC-классе, так что вы можете вызывать его как метод расширения:
public static void AddCustomJwtBearer(this AuthenticationBuilder builder, Action<JwtBearerOptions> options)
{
builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IPostConfigureOptions<JwtBearerOptions>, JwtBearerPostConfigureOptions>());
builder.AddScheme<JwtBearerOptions, JwtBearerHandler>("Bearer", null, options);
}
/// <summary>
/// Returns a configured <see cref="JwtBearerEvents"/>
/// </summary>
/// <param name="tokenConfiguration">Token Configuration</param>
/// <returns><see cref="JwtBearerEvents"/></returns>
private static JwtBearerEvents ConfigureJwtEvents(TokenConfiguration tokenConfiguration)
{
var bearerEvents = new JwtBearerEvents
{
OnAuthenticationFailed = context =>
{
if (context.Exception.GetType() == typeof(SecurityTokenExpiredException))
{
context.Response.Headers.Add("Token-Expired", "true");
}
return Task.CompletedTask;
}
};
// Authentication Failed Method
bearerEvents.OnAuthenticationFailed = [YOUR-EVENT-HANDLER]
// Challenge Raised Event
bearerEvents.OnChallenge = [YOUR-EVENT-HANDLER]
// Message Received Event
bearerEvents.OnMessageReceived = [YOUR-EVENT-HANDLER]
// Token Validated Event
bearerEvents.OnTokenValidated = [YOUR-EVENT-HANDLER]
return bearerEvents;
}
Где он говорит: [YOUR-EVENT-HANDLER] .. Вы можете добавить свои собственные методы обработчика событий, и они будут срабатывать, если / когда произойдет каждое из этих событий.