new*_*per 12 oauth access-token oauth-2.0 identityserver4
我需要帮助来了解时钟偏差的工作原理。我们定义时钟偏差来处理两方之间的时间变化。但是,我的困惑是:
那么,为什么我们需要时钟偏差呢?谁能给我一个例子来说明它是如何工作的以及它在哪些情况下会导致问题或好处?
Microsoft JWT 验证中间件存在时钟偏差。默认设置为5分钟,不能小于(300秒/5分钟)
有一个名为 ClockSkew 的令牌验证参数,它获取或设置验证时间时要应用的时钟偏差。ClockSkew 的默认值为 5 分钟。这意味着如果您尚未设置,您的令牌在最多 5 分钟内仍然有效。如果您想在确切的时间使您的令牌过期;您需要将 ClockSkew 设置为零,如下所示,
services.AddAuthentication("Bearer").AddJwtBearer("Bearer", options =>
{
options.Authority = "https://localhost:44347";
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
};
});
Run Code Online (Sandbox Code Playgroud)
让我们考虑一个短期访问令牌。当我向服务器发出请求时,服务器将检查我的令牌是否已过期。它如何检查它是否知道令牌何时创建以及现在是什么时间。大多数访问令牌会在一个小时后过期,但这实际上取决于它在身份验证服务器中的设置方式。因此,如果令牌是在一个多小时前创建的,则它已过期,并且会通知用户。这就是我们尝试确保服务器与NTP同步的原因。
让我们首先考虑什么是时钟偏差。如果我们有两个身份验证服务器怎么办?你怎么知道他们会有相同的时间?如果他们实际上差了几分钟怎么办。一台服务器将返回令牌已过期,而另一台则不会。如果您是一家小公司,这可能无关紧要。
现在考虑一下您是否是一家在全球拥有服务器的大型搜索引擎公司。假设它是 2016 年的秋天,夏令时开始了。现在您有一些服务器在一个时间运行,而其他服务器在另一个时间运行。也许只是某个国家/地区决定在开始夏令时时进行更改,并且大量代币无缘无故失效。免责声明我不为上述搜索引擎公司工作。我只是看着这件事发生,这是我对发生的事情的理论。
为什么我们需要时钟偏差。
您不需要它,但如果您有两个身份验证服务器,则可以拥有它。所以你可能应该处理它。 https://softwareengineering.stackexchange.com/a/245182/160992
| 归档时间: |
|
| 查看次数: |
12531 次 |
| 最近记录: |