Как записать «несанкционированный» (401) ответ - PullRequest
0 голосов
/ 11 января 2019

Я использую токены JWT для аутентификации

services.AddAuthentication(options =>
{
    options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
    .AddJwtBearer(jwtOptions =>
    {
        jwtOptions.TokenValidationParameters = tokenValidationParameters;
    });

В моем контроллере атрибут [Authorize] используется для проверки подлинности вызывающей стороны. Это отлично работает.

Однако: если неавторизованный пользователь делает запрос, он получает ответ 401. Можно ли как-нибудь «перехватить» этот ответ и записать, что был сделан несанкционированный вызов?

EDIT

Было предложено добавить «промежуточное ПО для исключений», которое я уже сделал, но неавторизованный вызов не вызывает исключение ...

services.AddMvc()
    .AddMvcOptions(options =>
    {
        // Order is important! A request will run from top to bottom through each filter.
        options.Filters.Add(typeof(MyExceptionFilterAttribute));
    });

и атрибут:

public class MyExceptionFilterAttribute : ExceptionFilterAttribute
{
    /// <summary>
    /// ctor
    /// </summary>
    public MyExceptionFilterAttribute()
    {

    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="context"></param>
    public override void OnException(ExceptionContext context)
    {


        ApplicationLogger.LogError("Bad request", context.Exception);
    }
}

1 Ответ

0 голосов
/ 11 января 2019

Как насчет этого:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILogger<Startup> logger)
{
    // ...

    app.Use(async (context, next) =>
    {
        await next();

        if (context.Response.StatusCode == (int)System.Net.HttpStatusCode.Unauthorized)
        {
            logger.LogWarning("Unauthorized request");
        }
    });

    app.UseAuthentication();

    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...