繁体   English   中英

如何更改jwt.io令牌中的'nbf'值:C#

[英]How to change 'nbf' value in jwt.io token : C#

由于某些原因,我想更改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. 您没有在此处显示太多代码,因此我看不到令牌的生成方式,但是如果您有类似以下内容:

     var token = new JwtSecurityToken(_issuer, audienceId, data.Identity.Claims, issued.Value.UtcDateTime, expires.Value.UtcDateTime, signingKey); 

那么第四个参数是所需的nbf(不在此之前)。 实际上,您不需要手动添加nbf声明,因为它是JWT中的标准字段之一

  1. 您的时间戳对我来说似乎很奇怪

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

JWT中的时间戳是UNIX时间戳,从1970年1月1日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日期/时间为止的秒数,而忽略了leap秒。

因此,JWT会将您的值(63622665869)解释为02/14/3986 @ 10:44 am(UTC)或完全不接受。

您可以在多个网站上查看/转换时间戳,例如: http : //www.unixtimestamp.com/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM