[英]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.