首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenIdConnect从OpenId提供程序验证jwt

OpenIdConnect从OpenId提供程序验证jwt
EN

Stack Overflow用户
提问于 2021-07-27 09:54:49
回答 3查看 288关注 0票数 1

我们有一个web应用程序Vuejs(前端)和一个api Nodejs(back)。

我们将身份验证委托给第三方OpenIdProvider。

用户在前面登录,获取和访问令牌。

此访问令牌包含:

  • :在此之前,不能接受JWT进行处理。
  • iat:JWT发布的时间。
  • exp:令牌的时间过期

就我而言,当我在上午11点登录时,我有:

  • nbf:上午11:00
  • iat:上午11:00
  • 执行时间:上午11:30

在从VueJS到NodeAPI的每个请求中,访问令牌都由back传递和验证。

我像下面这样验证jwt令牌:

代码语言:javascript
运行
复制
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选项,但是问题仍然存在于令牌的有效期上吗?因为提供程序的发布时间与我的服务器上的时间之间存在时间差,这会扭曲验证。

你推荐什么?这是从提供程序验证我的令牌的正确方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-07-30 09:19:35

谢谢加里!最后,我在我的码头文件中设置了ENV TZ="Europe/Paris",我的后端现在处于良好的时区。

我还添加了notBefore检查的停用,以避免在有几分钟延迟的情况下出现问题。

代码语言:javascript
运行
复制
jwt.verify(token, publicKey, { ignoreNotBefore:true, algorithms: ['RS256'], audience: process.env.OP_CLIENT });
票数 1
EN

Stack Overflow用户

发布于 2021-07-27 18:14:57

您的代码看起来非常标准--类似于我的这段代码

使用的时间应该是UTC时间,所以首选的解决方案是确保服务器上的UTC时间是正确的--例如在bash中运行一个简单的OS命令,比如date -u

还请注意,有一个名为clockTimestamp的选项可以传递到Auth0库中。

不过,如果服务器时钟严重错误,这将于事无补。如果IT管理员运行服务器,则确保系统时钟正确是他们的职责。

票数 1
EN

Stack Overflow用户

发布于 2021-07-29 12:24:39

我们的服务器正在群集集群中的一个码头容器中运行。

所以我认为,在我的部署阶段,我必须正确地设置好的UTC时区。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68542746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档