在使用 OAuth2 和 OpenID Connect 时,我们通常需要使用公钥加密/验签,私钥解密/签名等操作,这些操作需要使用 JSON Web Key (JWK)访问。jwks-db 是一个将 JWK 管理起来的 npm 包,它提供了通用公钥服务以及一般性的 JWK 获取。在本篇文章中,我们将详细介绍 jwks-db 的使用方法,并提供基于示例的指导。
安装 jwks-db
在使用 jwks-db 的之前,需要先将 jwks-db 安装到您的项目中。使用以下命令可以安装 jwks-db:
npm install -S jwks-db
初始化
初始化 jwks-db 的方式是创建一个实例并将你的配置传递给它。例如:
const jwksDB = require('jwks-db'); const db = new jwksDB({ jwksUri: 'https://example.com/.well-known/jwks.json', cacheMaxAge: 86400 });
jwksUri
选项指定了 JWK 所在的 URL, cacheMaxAge
选项指定了 JWK 缓存的时间。 该选项的单位是秒。如果您的 JWK 视频频繁变更,则应设置较低的缓存时间。
获取 JWK
jwks-db 提供了 getSigningKey
方法,用于检索 JWK。下面的示例将使用 getSigningKey
获取一个 JWK:
-- -------------------- ---- ------- ----- --- - ------------------------ ----- ------ - -------- -------- ----- ----- - ---------------------- ----- --- - ----------------- - --------- ---- -------------- --------------------- --------- -- - ----------------- ------------- -- ----------------- ----- -------- -- - --------------------- --- -- ---------- -- - ------------------- ---
该代码使用 jsonwebtoken 模块,签发了一个 JWT token,然后使用 JWK ID 从 jwks-db 获取 JWK。JWKS 公开密钥将根据其kid字段进行缓存并在所需时自动更新。如果找不到 JWK,则将通过 getSigningKey
方法生成一个错误。
当获取到 JWK 后,我们使用 jsonwebtoken 模块对 token 进行解密。解密时,“publicKey”或“rsaPublicKey”将被用于验证 token 的签名。
获取所有 JWKS
jwks-db 提供了 getAll
方法,用于获取所有的 JWKS, 以下是该方法的示例使用:
db.getAll() .then(jwks => { console.log(jwks); }) .catch(err => { console.error(err); });
缓存
在请求 JWK 时,如存在缓存,则直接从缓存中读取。 cacheMaxAge
选项设置缓存上限,并且在超过 cacheMaxAge
秒后会自动刷新缓存。
总结
在本文中,我们介绍了 npm 包 jwks-db 的用法及其提供的各种方法,如获取 JWKS 和 JWK,使用缓存等。jwks-db 包的使用方法非常简单,只需要少量的代码就可以实现 JWK 的获取和 JWKS 的管理。相信通过本文我们可以对 jwks-db 有更深入更清晰的认识。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005672081e8991b448e38ee