如何在jwt.io标记中更改'nbf'值:C#

时间:2017-02-14 05:21:28

标签: c# jwt

出于某种原因,我想更改 jwt令牌中的nbf有效负载值。我试图增加价值,但无法实现它。

DateTime original = DateTime.Now;
original = original.AddMinutes(-10);
var seconds = original.Subtract(DateTime.MinValue).TotalSeconds;
var claimsIdentity = new ClaimsIdentity(new List<Claim>()
{
    new Claim("email",sresult.Properties["mail"][0].ToString()),
    new Claim("sub", accountName),
    new Claim("myv",seconds.ToString()),
    new Claim("nbf",seconds.ToString()),

我在做错误时,nbf值没有更新我的值。实际nbf值为1487049869(系统生成的日期时间),但我的值为63622665869(比当前日期时间短-10分钟)。

1 个答案:

答案 0 :(得分:1)

我想到了两件事:

  1. 你没有在这里显示很多代码,所以我看不到令牌是如何生成的,但如果你有这样的东西:

    var token = new JwtSecurityToken(_issuer, audienceId, data.Identity.Claims, issued.Value.UtcDateTime, expires.Value.UtcDateTime, signingKey);
    
  2. 然后第四个参数是所需的nbf(不是之前的)。实际上你不需要手动添加nbf声明,因为它是JWT中的标准字段之一

    1. 你的时间戳对我来说很奇怪
    2.   

      我的值是63622665869(比当前日期时间短-10分钟)。

      JWT中的时间戳是UNIX时间戳,从01.01.1970 00:00 UTC开始计算:https://tools.ietf.org/html/rfc7519#section-4.1.4说明数字日期用于exp声明(以及nbf(不是之前)和iat(已发布)在声明)

      https://tools.ietf.org/html/rfc7519#section-2定义数字日期:

        

      表示来自的秒数的JSON数值   1970-01-01T00:00:00Z UTC直到指定的UTC日期/时间,忽略   闰秒。

      所以JWT会解释你的价值(63622665869) 作为02/14/3986 @ 10:44(UTC) 或根本不被接受。

      有几个网站可以检查/转换您的时间戳,例如:http://www.unixtimestamp.com/