Как вернуть HTTP-статус 401, когда клиент пропускает любую из включенных схем аутентификации в ASP.NET Core? - PullRequest
0 голосов
/ 11 января 2019

Мы используем 2 схемы аутентификации (Bearer, MTLS) в приложении ASP.NET Core.

Когда клиент игнорирует отправку сертификата И токена-носителя клиента, ответом является 401, что является ожидаемым.

Когда клиент отправляет только сертификат клиента ИЛИ только токен на предъявителя, аутентификация проходит, и запрос завершается неудачно при авторизации с кодом состояния 403.

Есть ли способ сделать все методы аутентификации обязательными и вернуть код состояния 401 при отсутствии сертификата клиента или токена на предъявителя?

// Authentication and Authorization setup:
IServiceCollection services = . . .
            . . .
services.AddAuthentication(MtlsAuthenticationHandler.AuthenticationScheme)
    .AddMtlsAuthentication()
    .AddJwtBearer(options =>
    {
        . . .
    });
services.AddAuthorization(options =>
{
    options.AddPolicy("RequireMtlsAndBearer", 
        builder => builder.AddAuthenticationSchemes(MtlsAuthenticationHandler.AuthenticationScheme, JwtBearerDefaults.AuthenticationScheme)
            .AddRequirements(. . .)
            .AddRequirements(. . .));
});


// Controller:
[HttpGet("v1/endpoint")]
[Authorize("RequireMtlsAndBearer")]  
public async Task<IActionResult> Get()
{
. . .
}

1 Ответ

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

Это предложение. Вы можете сделать это в Configure метода запуска класса

app.UseStatusCodePagesWithReExecute("/Error", "?status={0}");

и затем в HomeContoller:

   [HttpGet("/Error"), HttpPost("/Error")]
    public IActionResult Error([FromQuery] int status)
    {
        string errors1 = "some info";

        if (status == 403)
        {
            return new JsonResult(new { message = "your description", 
            statusCode=401,errors=errors1 });
       }
       else
        {
            return new JsonResult(new { message = "UNDEFINED_ERROR", statusCode = 
            status, errors = errors1 });
        }
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...