这个问题的原因是系统时钟不正确,因此在生成令牌时会分配未来的nbf值。要解决此问题,需要将系统时钟调整为正确的时间,或者可以在代码中添加一个日期调整令牌签发和验证之间的差异。例如,可以使用以下代码:
var offset = TimeSpan.FromSeconds(10);
var now = DateTimeOffset.UtcNow;
var nbf = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero).AddSeconds(issuedAt).Add(offset);
if (now.CompareTo(nbf) < 0)
{
throw new SecurityTokenInvalidNotBeforeException();
}
此代码在令牌签发时添加10秒的偏移量,并在验证令牌时检查nbf是否已过期。如果nbf值分配在未来,则会引发SecurityTokenInvalidNotBeforeException异常。