【问题标题】:How to change 'nbf' value in jwt.io token : C#如何更改 jwt.io 令牌中的“nbf”值:C#
【发布时间】:2017-07-02 06:54:48
【问题描述】:

出于某种原因,我想更改我的 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 分钟)。

【问题讨论】:

  • 我刚刚重新审视了我的答案,想知道它是否对您有帮助。
  • @jps :) unix 时间帮助

标签: c# jwt


【解决方案1】:

我想到了两件事:

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

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

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

  1. 我觉得你的时间戳很奇怪

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

JWT 中的时间戳是从 01.01.1970 00:00 UTC 开始计算的 UNIX 时间戳:https://www.rfc-editor.org/rfc/rfc7519#section-4.1.4 解释说数字日期用于 exp 声明(也用于 nbf(不是之前)和 iat(发布时间)声明)

https://www.rfc-editor.org/rfc/rfc7519#section-2 定义数字日期:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-09-03
    • 2021-12-08
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 2021-01-25
    • 1970-01-01
    相关资源
    最近更新 更多