C# 我如何评估ClaimsPrincipal的过期日期?
我正在尝试读取.NET服务器应用程序中ClaimsPrincipal的过期日期 我想我知道如何获得它:C# 我如何评估ClaimsPrincipal的过期日期?,c#,.net,claims-based-identity,C#,.net,Claims Based Identity,我正在尝试读取.NET服务器应用程序中ClaimsPrincipal的过期日期 我想我知道如何获得它: Claim exp = accessClaimsPrincipal.FindFirst("exp"); 这给了我一个索赔对象。我可以得到Claim对象的.Value,它给了我一个字符串。但是,我需要的是一个DateTime对象。如何将此声明转换为日期时间?根据,is应该是一个数字日期值(也称为记号)。e、 g.637553398040000000 “exp”(过期时间)声
Claim exp = accessClaimsPrincipal.FindFirst("exp");
这给了我一个索赔对象。我可以得到Claim对象的.Value,它给了我一个字符串。但是,我需要的是一个DateTime对象。如何将此声明转换为日期时间?根据,is应该是一个数字日期值(也称为记号)。e、 g.637553398040000000
“exp”(过期时间)声明标识上的过期时间
或之后,不得接受JWT进行处理。这个
处理“exp”索赔要求当前日期/时间
必须在“exp”索赔中列出的到期日期/时间之前
实施者可能会提供一些小的回旋余地,通常不超过
几分钟,以解释时钟偏移。它的值必须是一个数字
包含NumericDate值的。此声明的使用是可选的
因此,在转换为DateTime之前,它需要对long
进行解析
Claim exp = accessClaimsPrincipal.FindFirst("exp");
var expDate = new DateTime(long.Parse(exp.Value));
备选方案:如果字符串值有时区(或者您知道时区),请使用DateTimeOffset。@gunr2171值得注意,但可能与答案无关。另外,我不建议您使用DateTimeOffset
,除非您正在实际处理偏移量。。。如果我想提高对这件事的关注或意识,我只是想提请大家注意DateTimeKind
——处理与解析相关的未指定、UTC或本地数据。事实上,我收回了这一点。。根据应用程序开发的默认值应该是DateTimeOffset
——这似乎也是一个很好的场景,因为在这里您不会接受模糊性。因此,我同意,与DateTime
类型相反,通过引用和DateTimeOffset
类型,这个答案可能会得到改进。对不起,评论太冗长了。