JWT中exp(过期时间)声明的格式是什么

JWT中exp(过期时间)声明的格式是什么,jwt,azure-active-directory,adal,Jwt,Azure Active Directory,Adal,我正在使用ADAL库获取资源的访问令牌。有人知道过期时间是什么格式吗?更具体地说 “exp”(过期时间)索赔 JwtSecurityToken类在解析后只返回int32。因此,这不是一个好的指标 已尝试将其解析为TimeSpan和DateTime,但两个值的间隔不是90分钟。几乎一样 这是我从fiddler那里得到的iat和exp声明(用于解析令牌) iat:1475874457 exp:1475878357 两个值相差不大。RFC 7519规定,和索赔值必须是NumericDate值 Nume

我正在使用ADAL库获取资源的访问令牌。有人知道过期时间是什么格式吗?更具体地说
“exp”(过期时间)索赔

JwtSecurityToken
类在解析后只返回int32。因此,这不是一个好的指标

已尝试将其解析为
TimeSpan
DateTime
,但两个值的间隔不是90分钟。几乎一样

这是我从fiddler那里得到的
iat
exp
声明(用于解析令牌)

iat
:1475874457

exp
:1475878357

两个值相差不大。

RFC 7519规定,和索赔值必须是
NumericDate

NumericDate
是中的最后一个定义,定义为自历元起的秒数(不是毫秒):

一个JSON数值,表示从 1970-01-01T00:00:00Z UTC,直到指定的UTC日期/时间, 忽略闰秒。这相当于IEEE标准1003.1, 2013年版[POSIX.1]定义“从纪元开始的秒数”,以 每天的时间正好是86400秒,其他的 然后,可以表示非整数值。见RFC 3339 [RFC3339]了解有关一般日期/时间和UTC的详细信息 特别的


1475878357-1475874457=3900秒
3900秒/60秒=65分钟
(1小时令牌生命周期+5分钟时钟偏移)您使用的是什么平台?在windowsnew Date上使用.NET(expires_at*1000)我打算对.NET选择使用
int32
值作为UNIX时间戳发表贬损评论(2038每秒钟就要接近一次!)但问题似乎不准确地报告了
JwtSecurityToken
类。它返回的是
DateTime
,而不是
int32
。你从哪里得到
int32
的东西?我在寻找JWT token exp的格式(我知道它是EPOCH,但以秒或毫秒为单位),这就回答了我的问题。可以像这样转换为Javascript日期时间:
新日期(exp_in_seconds*1000)
(其中Javascript从epoch开始需要毫秒;a)@TheRedPea我认为您的评论可能会误导,因为“Unix时间戳”部分.Unix时间戳指定秒数。JSON Web令牌使用秒数。JavaScript日期使用毫秒数。谢谢@Vincent你说得对,这就是我乘以1000的原因。我的帖子仍然暗示它们是相同的单位;正如你指出的,它们是不同的单位(JWT的时间戳以秒为单位,但Javascript日期需要毫秒);但是JWT和Javascript日期构造函数都使用了“从纪元开始”的思想。这篇博文给出了这个问题的简单解决方案,它创建了一个扩展方法来处理这个问题。