Проверка подлинности ASP NET Core JWT позволяет использовать токены с истекшим сроком действия - PullRequest
0 голосов
/ 18 сентября 2018

По какой-то причине мое приложение RESTful разрешает запросы от клиента Angular с токеном с истекшим сроком действия в течение некоторого времени.Генерируя токен:

private async Task<string> GenerateJwtToken(ApplicationUser user)
{
    var claims = new List<Claim>
    {
        new Claim(JwtRegisteredClaimNames.Sub, user.Email),
        new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
        new Claim(ClaimTypes.NameIdentifier, user.Id)
    };
    claims.AddRange(await _userManager.GetClaimsAsync(user));
    var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration.GetSection("SigningKey").Value));
    var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
    var expires = 
        DateTime.Now.AddSeconds(10);
        //DateTime.Now.AddDays(Convert.ToDouble(_configuration["ExpireDays"]));

    var token = new JwtSecurityToken(
        issuer: _configuration["Issuer"],
        audience: _configuration["Audience"],
        claims: claims,
        expires: expires,
        signingCredentials: creds);
    return new JwtSecurityTokenHandler().WriteToken(token);
}

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

t: вторник, 18 сентября 2018 года 08:53:43 GMT + 0300 (московское стандартное время) credentials-service.ts: 101

сейчас: вт. 18 сен. 2018 08:53:41 GMT + 0300 (московское стандартное время) credentials-service.ts: 102

false

истина означает истек срок действия

credentials-service.ts: 100 т: вт 18 сентября 2018 08:53:43 GMT + 0300 (московское стандартное время)

credentials-service.ts: 101 сейчас:Вт 18 сен 2018 08:58:01 GMT + 0300 (московское стандартное время)

credentials-service.ts: 102

true

Мне только отказаличерез 5-6 минут почему-то вместо 10 секунд.

1 Ответ

0 голосов
/ 18 сентября 2018

Если вы определяете свои параметры TokenValidationParameters в Startup.cs, присвойте свойству ClockSkew значение TimeSpan, равное нулю:

ClockSkew = TimeSpan.Zero, например:

new TokenValidationParameters
                {
                    IssuerSigningKey = signingKey,
                    ValidIssuer = issuer,
                    ValidAudience = audience,
                    ValidateLifetime = true,

                    ClockSkew = TimeSpan.Zero
                };

Причина этогоявляется то, что ClockSkew имеет значение по умолчанию 5 минут

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