繁体   English   中英

handler.CreateJwtSecurityToken(descriptor); IDX12401

[英]handler.CreateJwtSecurityToken(descriptor); IDX12401

当我的服务器在本地运行(GTM + 1)时,当我将服务器置于 -8 时区时一切都很好,例如

然后我收到一条消息:

IDX12401: Expires: '[PII is hidden by default. Set the 'ShowPII' flag in IdentityModelEventSource.cs to true to reveal it.]' must be after NotBefore: '[PII is hidden by default. Set the 'ShowPII' flag in IdentityModelEventSource.cs to true to reveal it.]'.

这似乎是因为

Expires = DateTime.Now.AddMinutes(30),

... other code ...

JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
JwtSecurityToken token = handler.CreateJwtSecurityToken(descriptor);

错误出来。 奇怪的是,Expires 字段是该区域的当前时间 +30 分钟(这是配置的 +30 分钟)。 这很奇怪。 为什么它不允许登录并立即与该消息过期,但只有在 -X 时区,而显示的时间实际上是未来 30 分钟。

该错误并不清楚究竟要做什么,但是如果您查找足够长的时间,您会发现还有另一个名为“NotBefore”的属性,错误正在谈论该属性。

正如您在文档中看到的那样,“NotBefore”和“Expires”属性都应该使用 UTC,因此,正如您已经猜到的,验证使用 DateTime.UtcNow。 因此,如果您居住在时区为负的国家/地区,您应该面临这个问题。

解决方案很简单:

var date = DateTime.UtcNow;
var tokenDescriptor = new SecurityTokenDescriptor
{
    Expires = date.AddMinutes(10),
    NotBefore = date,
};

此外,重要的是要注意“NotBefore”属性将被转换为“nbf”字段(之前无效),因此如果您插入一个高于 UtcNow 的值,您可能会遇到一些意想不到的问题。

暂无
暂无

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

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