我们有一个web应用程序Vuejs(前端)和一个api Nodejs(back)。
我们将身份验证委托给第三方OpenIdProvider。
用户在前面登录,获取和访问令牌。
此访问令牌包含:
就我而言,当我在上午11点登录时,我有:
在从VueJS到NodeAPI的每个请求中,访问令牌都由back传递和验证。
我像下面这样验证jwt令牌:
jwt.verify(token, publicKey, { algorithms: ['RS256'], audience: process.env.OP_CLIENT });
publicKey是从OpenIdProvider jwks_uri读取的,听众是我的提供者客户机id。
问题是,我的nodejs服务器上的时间很晚了,是吗:9:00
因此,当我使用“验证”时,我会得到以下错误消息:
在/var/www/app/node_modules/jsonwebtoken/verify.js:143:21 at getSecret (/var/www/app/node_modules/jsonwebtoken/verify.js:90:14) at Object.module.exports 作为验证 at异步authUser (/var/www/app/src/helpers/openid.js:87:19) { date: 2021-07-27T09:00:51.000Z }
我读到可以忽略notBefore选项,但是问题仍然存在于令牌的有效期上吗?因为提供程序的发布时间与我的服务器上的时间之间存在时间差,这会扭曲验证。
你推荐什么?这是从提供程序验证我的令牌的正确方法吗?
发布于 2021-07-30 09:19:35
谢谢加里!最后,我在我的码头文件中设置了ENV TZ="Europe/Paris",我的后端现在处于良好的时区。
我还添加了notBefore检查的停用,以避免在有几分钟延迟的情况下出现问题。
jwt.verify(token, publicKey, { ignoreNotBefore:true, algorithms: ['RS256'], audience: process.env.OP_CLIENT });
发布于 2021-07-27 18:14:57
您的代码看起来非常标准--类似于我的这段代码。
使用的时间应该是UTC时间,所以首选的解决方案是确保服务器上的UTC时间是正确的--例如在bash中运行一个简单的OS命令,比如date -u
。
还请注意,有一个名为clockTimestamp的选项可以传递到Auth0库中。
不过,如果服务器时钟严重错误,这将于事无补。如果IT管理员运行服务器,则确保系统时钟正确是他们的职责。
发布于 2021-07-29 12:24:39
我们的服务器正在群集集群中的一个码头容器中运行。
所以我认为,在我的部署阶段,我必须正确地设置好的UTC时区。
https://stackoverflow.com/questions/68542746
复制相似问题