簡體   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