关于 api-authentication
面向 API 开发者的身份验证实施技能,介绍 JWT、OAuth 2.0、API 密钥和会话等方案,并涵盖安全要求与常见错误。
主要功能
- 01介绍 JWT 身份验证
- 02涵盖 OAuth 2.0 集成
- 03说明 API 密钥与会话方案
- 04提供 Node.js 与 Flask 示例
- 05列出认证安全要求
适用场景
- 01为 API 选择身份验证方式
- 02实现 JWT 令牌认证
- 03接入第三方 OAuth 服务
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ secondsky/ claude-skills --skill api-authentication安装后在 Claude Code 中输入/api-authentication确认已加载。
附带文件references/python-flask.md
详细介绍
API 身份验证
使用现代标准和最佳实践,为 API 实现安全的身份验证机制。
身份验证方法
| 方法 | 使用场景 | 安全级别 |
|---|---|---|
| JWT | 无状态身份验证、SPA | 高 |
| OAuth 2.0 | 第三方集成 | 高 |
| API Keys | 服务间调用 | 中 |
| Session | 传统 Web 应用 | 高 |
JWT 实现(Node.js)
const jwt = require('jsonwebtoken');
const generateTokens = (user) => ({
accessToken: jwt.sign(
{ userId: user.id, role: user.role },
process.env.JWT_SECRET,
{ expiresIn: '15m' }
),
refreshToken: jwt.sign(
{ userId: user.id, type: 'refresh' },
process.env.REFRESH_SECRET,
{ expiresIn: '7d' }
)
});
const authMiddleware = (req, res, next) => {
const authHeader = req.headers.authorization;
// Validate authorization header format
if (!authHeader || !authHeader.startsWith('Bearer ')) {
return res.status(401).json({ error: 'Malformed authorization header' });
}
const parts = authHeader.split(' ');
if (parts.length !== 2) {
return res.status(401).json({ error: 'Malformed authorization header' });
}
const token = parts[1];
if (!token) {
return res.status(401).json({ error: 'No token provided' });
}
try {
req.user = jwt.verify(token, process.env.JWT_SECRET);
next();
} catch (err) {
res.status(401).json({ error: 'Invalid token' });
}
};
安全要求
- 始终使用 HTTPS
- 将令牌存储在 HttpOnly Cookie 中(而不是 localStorage)
- 使用 bcrypt 哈希密码(成本因子为 12+)
- 在身份验证端点实施速率限制
- 定期轮换密钥
- 切勿在 URL 中传输令牌
安全标头
app.use((req, res, next) => {
res.setHeader('X-Content-Type-Options', 'nosniff');
res.setHeader('X-Frame-Options', 'DENY');
res.setHeader('Strict-Transport-Security', 'max-age=31536000');
next();
});
其他实现
请参阅 references/python-flask.md,了解:
- 使用基于角色的访问控制装饰器实现 Flask JWT
- 使用 Authlib 集成 OAuth 2.0 Google
- 使用安全哈希实现 API 密钥身份验证
应避免的常见错误
- 存储明文密码
- 使用弱 JWT 密钥
- 忽略令牌过期时间
- 在生产环境中禁用 HTTPS
- 记录敏感令牌
评论
支持 Markdown