【发布时间】:2021-10-03 03:40:12
【问题描述】:
我们有一个 web 应用程序 Vuejs(front) 和一个 api Nodejs(back)。
我们将身份验证委托给第三方 OpenIdProvider。
用户在前台登录并获取和访问token。
此访问令牌包含:
- nbf :JWT 不得被接受处理之前的时间。
- iat:发布 JWT 的时间。
- exp:令牌过期时间
就我而言,当我在上午 11 点登录时,我有:
- nbf:上午 11:00
- 上午 11:00
- exp:上午 11:30
在VueJS对NodeAPI的每一次请求中,背后都会传递访问令牌并进行验证。
我像这样验证 jwt 令牌:
jwt.verify(token, publicKey, { algorithms: ['RS256'], audience: process.env.OP_CLIENT });
publicKey 是从 OpenIdProvider jwks_uri 中读取的,受众是我的提供者客户端 ID。
问题是我的nodejs服务器时间晚了,是不是:9:00
所以当我使用验证时,我会收到以下错误消息:
NotBeforeError:jwt 未激活 在 /var/www/app/node_modules/jsonwebtoken/verify.js:143:21 在 getSecret (/var/www/app/node_modules/jsonwebtoken/verify.js:90:14) 在 Object.module.exports [作为验证] (/var/www/app/node_modules/jsonwebtoken/verify.js:94:10) 在异步 authUser (/var/www/app/src/helpers/openid.js:87:19) { 日期:2021-07-27T09:00:51.000Z }
我读到我可以忽略 notBefore 选项,但在令牌的有效期内问题仍然存在? 因为提供者的发布时间和我的服务器上的时间之间存在时间差,它会扭曲验证。
你有什么推荐的?这是从提供商验证我的令牌的正确方法吗?
【问题讨论】:
标签: jwt openid-connect openid-provider