Okta JWT 验证程序已停止与'Error while resolving signing key for kid ...'合作



问题

我有一个在EC2实例上运行的express应用程序,并使用Node.js作为后端。我使用Okta来铸造/验证用于身份验证的令牌,多年来一直有效(未受影响)。突然间,我的应用程序无法再访问我的服务器,当我使用poster尝试查询一些数据时,我收到以下错误:Error while resolving signing key for kid "Py9YS2tY1x--ESeMbRQVg6lWzKm45cQfZgk0GitmUpc"

我看了Okta的文档,但似乎没有任何帮助。同样,这已经运行了多年。下面是进行验证的auth.js文件:

const OktaJwtVerifier = require('@okta/jwt-verifier')
const oktaJwtVerifier = new OktaJwtVerifier({
issuer: process.env.ISSUER,
clientId: process.env.CLIENT_ID})
module.exports = async (req, res, next) => {
try {
const { authorization } = req.headers
if (!authorization) throw new Error('You must send an Authorization header')
const [authType, token] = authorization.trim().split(' ')
if (authType !== 'Bearer') throw new Error('Expected a Bearer token')
const { claims } = await oktaJwtVerifier.verifyAccessToken(token, 'api://default')
if (!claims.scp.includes(process.env.SCOPE)) {
throw new Error('Could not verify the proper scope')
}
next()
} catch (error) {
next(error.message)
}
}

颁发者和客户端ID都已更改,没有任何更改。我所知道的唯一变化是,在此之前,EC2实例从t2.micro升级到t2.small,存储空间从8 GB增加到16 GB。此过程确实需要停止/启动/重新启动实例等。然而,停止/启动/重新启动在过去已经进行了多次,并且从未出现过此问题。

我将非常感谢您的帮助!

附加信息

在扩展实例的存储大小时,我遵循了本答案中列出的步骤来增加实际分区大小,以及本答案中概述的步骤来纠正"无法解析主机"错误。在分区增长期间,驱动器的临时存储过程中,可能有什么东西损坏或丢失了?

今天早上我发现,如果我在本地运行服务器,并尝试使用Postman,而不是"为孩子解析签名密钥"错误,那么邮递员请求就会无限期挂起,我可以在控制台中看到抛出了一个未捕获的异常:

MongoDB connection error: MongoNetworkError: failed to connect to server [cluster-****-**-**.******.mongodb.net:*****] on first connect [MongoError: Authentication failed.

问题似乎来自与'@okta/jwt verifier'模块相关的一些缓存,该模块在分区增长或IP更改期间无效/损坏。重新启动实例清除了此问题并解决了此问题。