代码之家  ›  专栏  ›  技术社区  ›  Alexander Kozachenko

ASP NET核心JWT身份验证允许过期令牌

  •  1
  • Alexander Kozachenko  · 技术社区  · 7 年前

    出于某种原因,我的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:2018年9月18日星期二08:53:43 GMT+0300(莫斯科标准时间) 证书-服务。ts:101

    现在:2018年9月18日星期二08:53:41 GMT+0300(莫斯科标准时间) 证书-服务ts:102

    证书-服务。ts:100电话:2018年9月18日星期二08:53:43 GMT+0300 (莫斯科标准时间)

    (莫斯科标准时间)

    证书-服务ts:102

    1 回复  |  直到 7 年前
        1
  •  18
  •   MattjeS    7 年前

    时钟偏移=TimeSpan.Zero,例如:

    new TokenValidationParameters
                    {
                        IssuerSigningKey = signingKey,
                        ValidIssuer = issuer,
                        ValidAudience = audience,
                        ValidateLifetime = true,
    
                        ClockSkew = TimeSpan.Zero
                    };
    

    原因是ClockSkew的默认值为5分钟

    推荐文章