oauth2.0 时钟偏差和令牌

djp7away  于 5个月前  发布在  其他
关注(0)|答案(4)|浏览(65)

我需要帮助来理解时钟偏差是如何工作的。我们定义时钟偏差是为了处理双方之间的时间变化。但是,我的困惑是:
1.我们在令牌本身中拥有所有信息,例如令牌创建时间和到期时间
1.可以验证令牌
1.令牌在服务器上创建
那么,我们为什么需要时钟偏移呢?有没有人给予我举个例子,说明它是如何工作的,以及在哪些情况下它会带来问题或好处?

7fyelxc5

7fyelxc51#

让我们考虑一个短期访问令牌。当我向服务器发出请求时,服务器将检查我的令牌是否过期。它如何检查?好吧,它知道令牌是什么时候创建的,它知道现在是什么时间。大多数访问令牌在一个小时后过期,但这实际上取决于它是如何在认证服务器中设置的。所以如果令牌是在一个多小时前创建的,这就是为什么我们尝试确保服务器与NTP同步的原因。
让我们首先考虑一下什么是时钟偏差。如果我们有两个认证服务器怎么办?你怎么知道他们会有相同的时间?如果他们实际上是几分钟?一个服务器会返回令牌已经过期,而另一个不会。如果你是一家小公司,这可能无关紧要。
现在考虑一下,如果你是一家大型搜索引擎公司,服务器遍布世界各地。假设现在是2016年秋季,夏令时开始。现在你有一些服务器在一个时间运行,其他服务器在另一个时间运行。也许,只是也许,一些国家决定改变夏令时,然后,繁荣,一堆令牌得到无效没有理由。_免责声明我不为上述搜索引擎公司工作。我只是看着这件事发生,这是我的理论,至于发生了什么。
为什么我们需要时钟偏移?
你不需要它,但是如果你有两个认证服务器,你可以拥有它。所以你应该处理它。https://softwareengineering.stackexchange.com/a/245182/160992

xriantvc

xriantvc2#

好的,你的机器没有发生时钟偏移。默认情况下,时钟偏移被设置为5分钟。这就是JWT没有在预期时间到期的原因。

tzdcorbm

tzdcorbm3#

在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
            };
        });

字符串

bvjveswy

bvjveswy4#

这意味着在ValidateLifetime模式下为令牌过期时间设置容差。ClockSkew意味着对这种不一致性的容差(令牌发行者和其消费者的时间和时间之间)。
时钟偏移量指定在验证exp和nbf声明时服务器和客户端时钟之间允许的时间差(以秒为单位)。建议的默认值为5。


的数据

相关问题