Вернуть пользовательский ответ об ошибке JSON из AuthenticationMiddleware - PullRequest
0 голосов
/ 15 мая 2019

У меня есть веб-приложение ASP.NET Core, которое использует Microsoft AuthenticationMiddleware.

Я настраиваю это при запуске.

 app
    .UseMiddleware<ExceptionHandlingMiddleware>()
    .UseAuthentication()
    .UseMvc();

Используется аутентификация Аутентификация на носителе . У меня есть класс валидатора токена JWT, который наследуется от ISecurityTokenValidator.

Я регистрирую это в ConfigureServices:

services.AddSingleton<ISecurityTokenValidator, JwtTokenValidator>();

var serviceProvider = services.BuildServiceProvider();
var myTokenValidator = serviceProvider.GetService<ISecurityTokenValidator>();

services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
    options.SecurityTokenValidators.Add(myTokenValidator);
});

По запросу в веб-приложение вызывается метод ValidateToken этого класса JwtTokenValidator.

Однако, если этот метод выдает исключение (скажем, если токен сформирован неверно), он не перехватывается моим промежуточным программным обеспечением обработки исключений. Реализуется аналогично тому, как предлагает этот ответ . Мой класс обработчика исключений зарегистрирован до Microsoft-UseAuthentication и работает для любых других исключений, возникающих в промежуточном программном обеспечении.

Вместо этого веб-приложение просто возвращает несанкционированный 401 без тела.

Я хочу добавить собственный блог JSON в этом ответе, чтобы предоставить немного больше информации вызывающим моим API. Как это можно сделать?

...