Игнорировать просроченные токены на определенных маршрутах - PullRequest
0 голосов
/ 09 марта 2020

Используя токены JWT, я работал над аутентификацией для моего. NET Core API. Мне было интересно, могу ли я сказать своему API игнорировать истечение срока действия моего токена, когда пользователь запрашивает определенный маршрут, например, "/ refre sh", чтобы обновить sh токены с истекшим сроком действия. Я понимаю, что это можно обойти, предоставив токены с помощью запроса POST, но я хочу иметь возможность игнорировать истечение срока действия токена, когда я хочу только идентифицировать вызывающего пользователя.

Мой код выполняется, как показано ниже , В настоящее время он работает с запросом POST, но я хочу иметь возможность предоставлять токены с истекшим сроком действия через заголовок.

[AllowAnonymous]
[HttpPost("refresh")]
public async Task<IActionResult> Refresh(RefreshRequest refreshRequest)
{
    // Validate refresh token
    if (!_tokenService.RefreshTokenValid(refreshRequest.Refresh_Token)) {
        return BadRequest("The request token is not a valid token.");
    }

    var tokenHandler = new JwtSecurityTokenHandler();

    // Validate actual token
    if (!tokenHandler.CanReadToken(refreshRequest.Token)) {
        return BadRequest("The JWT token is not a valid token.");
    }

    // Get the user from the JWT token
    var userId = _tokenService.GetUserIdFromtoken(refreshRequest.Token);
    var repoUser = await _repo.GetUserById(userId);

    // Map the user, generate a token and send response
    var newToken = _tokenService.GenerateRefreshedJwtToken(repoUser);
    var tokenUser = _mapper.Map(repoUser, new AuthRefreshedTokenUser(newToken));
    return Ok(tokenUser);
}

1 Ответ

0 голосов
/ 10 марта 2020

Простой способ - создать другую схему аутентификации и запретить проверку времени жизни токена:

.AddJwtBearer(options =>
{
    ...
    options.TokenValidationParameters.ValidateLifetime = false;
    ....

});

И применить эту схему аутентификации, используя [Authorize(AuthenticationSchemes = "schemeName")] для указанных c контроллеров / действий.

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