node-jwks-rsa 使用教程
1、项目介绍
node-jwks-rsa
是一个用于从 JWKS (JSON Web Key Set) 端点检索 RSA 公钥的库。它广泛应用于需要安全地验证 JSON Web Tokens (JWT) 的 Node.js 项目中。该库支持所有当前注册的 JWK 类型和 JWS 算法,确保了高度的安全性和兼容性。
2、项目快速启动
安装
在你的项目目录中运行以下命令进行安装:
npm install --save jwks-rsa
配置客户端
提供一个暴露你的签名密钥的 JWKS 端点:
const jwksClient = require('jwks-rsa');
const client = jwksClient({
jwksUri: 'https://sandrino.auth0.com/.well-known/jwks.json',
requestHeaders: {}, // 可选
timeout: 30000 // 默认为 30s
});
检索密钥
使用 getSigningKey
方法检索与特定 kid
匹配的签名密钥:
const kid = 'RkI5MjI5OUY5ODc1N0Q4QzM0OUYzNkVGMTJDOUEzQkFCOTU3NjE2Rg';
const key = await client.getSigningKey(kid);
const signingKey = key.publicKey || key.rsaPublicKey;
3、应用案例和最佳实践
应用案例
node-jwks-rsa
常用于需要验证 JWT 的 Web 应用和 API 服务中。例如,一个使用 Express 框架的 Node.js 应用可以通过中间件来验证 JWT:
const express = require('express');
const app = express();
const jwt = require('express-jwt');
const jwksRsa = require('jwks-rsa');
const checkJwt = jwt({
secret: jwksRsa.expressJwtSecret({
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
jwksUri: 'https://sandrino.auth0.com/.well-known/jwks.json'
}),
audience: 'https://api.myapp.com',
issuer: 'https://sandrino.auth0.com/',
algorithms: ['RS256']
});
app.get('/protected', checkJwt, (req, res) => {
res.json({ message: 'This is a protected route' });
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
最佳实践
- 缓存密钥:启用缓存以减少对 JWKS 端点的请求次数。
- 速率限制:限制每分钟对 JWKS 端点的请求次数,防止滥用。
- 安全头:在请求头中添加必要的认证信息,确保请求的安全性。
4、典型生态项目
node-jwks-rsa
通常与以下项目一起使用:
- express-jwt:用于在 Express 应用中验证 JWT。
- jsonwebtoken:用于生成和验证 JWT。
- passport-jwt:用于在 Passport 策略中验证 JWT。
这些项目共同构成了一个强大的身份验证和授权生态系统,适用于各种 Node.js 应用。