以最小的代码占用空间在 nodejs 中验证和解码 Cognito JWT
Verify and decode Cognito JWT in nodejs with smallest code footprint
我有一个使用 Cognito 身份验证作为 AWS Lambda 函数运行的应用程序。一切正常,但现在我正在尝试优化包大小以减少冷启动时间。
JWT 的验证和解码过程涉及:
- 从内部 AWS 端点获取 JWK
- 从 jwk-to-pem 模块调用 jwkToPem
- 使用 jsonwebtoken 模块验证和解码 JWT
当我查看存档中的 node_modules
时,最大的包都与上述步骤相关:
elliptic 140kb
bn.js 108kb
jsonwebtoken 84kb
hash.js 80kb
asn1.js 72kb
hmac-drbg 36kb
jwk-to-pem 32kb
Total ~550kb
这超过了 node_modules
大小的一半,我的应用程序代码只有 164kb 未缩小,因此您可以看到 JWT 解码对整体包大小有重大影响。
想知道是否有更轻的替代品...
感谢任何建议
鉴于“从内部 AWS 端点获取 JWK”步骤是从 JSON Web 密钥集获取,jose
版本 3.x 模块可以为您完成所有工作。
磁盘大小更大,但那是因为它是一个通用模块,并且还为 web 捆绑了运行时,包括 esm 和 cjs 风格,但不要担心 - 在您的运行时中,它只需要节点运行时文件和有 0 个依赖项。你可以使用 rollup 来摇树所有你没有使用的权重(其他子模块和运行时文件)。
import jwtVerify from 'jose/jwt/verify'
import createRemoteJWKSet from 'jose/jwks/remote'
const JWKS = createRemoteJWKSet(new URL('https://www.googleapis.com/oauth2/v3/certs'))
const { payload, protectedHeader } = await jwtVerify(token, JWKS, {
issuer: 'urn:example:issuer',
audience: 'urn:example:audience'
})
我有一个使用 Cognito 身份验证作为 AWS Lambda 函数运行的应用程序。一切正常,但现在我正在尝试优化包大小以减少冷启动时间。
JWT 的验证和解码过程涉及:
- 从内部 AWS 端点获取 JWK
- 从 jwk-to-pem 模块调用 jwkToPem
- 使用 jsonwebtoken 模块验证和解码 JWT
当我查看存档中的 node_modules
时,最大的包都与上述步骤相关:
elliptic 140kb
bn.js 108kb
jsonwebtoken 84kb
hash.js 80kb
asn1.js 72kb
hmac-drbg 36kb
jwk-to-pem 32kb
Total ~550kb
这超过了 node_modules
大小的一半,我的应用程序代码只有 164kb 未缩小,因此您可以看到 JWT 解码对整体包大小有重大影响。
想知道是否有更轻的替代品...
感谢任何建议
鉴于“从内部 AWS 端点获取 JWK”步骤是从 JSON Web 密钥集获取,jose
版本 3.x 模块可以为您完成所有工作。
磁盘大小更大,但那是因为它是一个通用模块,并且还为 web 捆绑了运行时,包括 esm 和 cjs 风格,但不要担心 - 在您的运行时中,它只需要节点运行时文件和有 0 个依赖项。你可以使用 rollup 来摇树所有你没有使用的权重(其他子模块和运行时文件)。
import jwtVerify from 'jose/jwt/verify'
import createRemoteJWKSet from 'jose/jwks/remote'
const JWKS = createRemoteJWKSet(new URL('https://www.googleapis.com/oauth2/v3/certs'))
const { payload, protectedHeader } = await jwtVerify(token, JWKS, {
issuer: 'urn:example:issuer',
audience: 'urn:example:audience'
})