为什么在非常罕见的情况下,JWT iat比nbf小?

为什么在非常罕见的情况下,JWT iat比nbf小?,jwt,identityserver4,appauth,Jwt,Identityserver4,Appauth,在iOS和Android中,JWT属性iat包含的值比nbf中的值小的情况非常少见 因此,用户会收到错误消息“ID令牌已过期”。这也是有道理的,但问题是为什么iat的时间会比nbf的时间短 有没有办法防止iat在identityserver4中小于nbf 这永远无法通过webbrowser(nextuth.js)复制。对于iOS和Android中的身份验证,我们使用appauth iOS和appauth Android 在出现上述错误的情况下,我们得到如下标记: { "nbf&qu

在iOS和Android中,JWT属性iat包含的值比nbf中的值小的情况非常少见

因此,用户会收到错误消息“ID令牌已过期”。这也是有道理的,但问题是为什么iat的时间会比nbf的时间短

有没有办法防止iat在identityserver4中小于nbf

这永远无法通过webbrowser(nextuth.js)复制。对于iOS和Android中的身份验证,我们使用appauth iOS和appauth Android

在出现上述错误的情况下,我们得到如下标记:

{
  "nbf": 1621951659,
  "exp": 1621951959,
  "iss": "issuer",
  "aud": "apps",
  "nonce": "V82ztq0cxNqslpVNsm_YYJZKJVUVhSpZlniB9hrXZ_o",
  "iat": 1621951658,
  "at_hash": "poDvhvDZ8EF__10uJiB2tQ",
  "s_hash": "1gg8istJoI9ATRN3H814rw",
  "sid": "F3559C9E64428AC1EA384588519CFBFB",
  "sub": "test@email.com",
  "auth_time": 1621951656,
  "idp": "local",
  "family_name": "Muster",
  "given_name": "Peter",
  "ClientId": "testapp",
  "amr": [
    "pwd"
  ]
}

这些值之间的时间差是多少?大多数客户端库需要考虑某种时钟漂移。iat和nbf之间的时间差只有一秒。iat值是来自identityserver还是来自客户端库?我猜这两个时间戳都是单独创建的,但通常都发生在一秒钟之内。但是当第一个时间戳(iat)在12:00:00.999获取时,nbf可能会在12:00:01.000创建,只需1毫秒,但会产生1秒的差异。