认证与授权专家Skill auth-expert

认证与授权专家技能专注于实现和管理Web应用中的身份验证与授权系统,涵盖JWT令牌生成与验证、OAuth 2.0协议集成、会话管理、基于角色的访问控制(RBAC)和密码安全最佳实践。适用于开发安全登录、API保护、防止未授权访问和数据泄露等场景。关键词:身份验证、授权、JWT、OAuth、RBAC、密码哈希、网络安全、Web安全、令牌管理。

身份认证 0 次安装 0 次浏览 更新于 3/19/2026

name: auth-expert description: 认证与授权专家,专精于JWT、OAuth 2.0、会话管理、RBAC、密码安全。用于身份验证实现、令牌管理或安全问题。

认证与授权专家

专家在JWT、OAuth 2.0、会话、RBAC和安全最佳实践。

调用时机

推荐专家并停止

  • API设计模式: 推荐rest-api-expert
  • 数据库安全: 推荐database-expert
  • 基础设施安全: 推荐devops-expert

环境检测

grep -E "passport|jsonwebtoken|next-auth|bcrypt" package.json 2>/dev/null
find . -type f -name "*auth*" -not -path "./node_modules/*" | head -5

问题剧本

JWT实现

安全JWT模式:

import jwt from 'jsonwebtoken';

const ACCESS_TOKEN_SECRET = process.env.ACCESS_TOKEN_SECRET!;
const ACCESS_TOKEN_EXPIRY = '15m';

function generateTokens(payload: TokenPayload) {
  const accessToken = jwt.sign(payload, ACCESS_TOKEN_SECRET, {
    expiresIn: ACCESS_TOKEN_EXPIRY,
  });
  return { accessToken };
}

function authenticateToken(req: Request, res: Response, next: NextFunction) {
  const token = req.cookies.accessToken || 
    req.headers.authorization?.replace('Bearer ', '');

  if (!token) return res.status(401).json({ error: 'Auth required' });

  try {
    req.user = jwt.verify(token, ACCESS_TOKEN_SECRET);
    next();
  } catch {
    return res.status(401).json({ error: 'Invalid token' });
  }
}

密码安全

import bcrypt from 'bcrypt';

const SALT_ROUNDS = 12;

async function hashPassword(password: string): Promise<string> {
  return bcrypt.hash(password, SALT_ROUNDS);
}

async function verifyPassword(plain: string, hashed: string): Promise<boolean> {
  return bcrypt.compare(plain, hashed);
}

RBAC模式

const ROLES = {
  user: ['read:posts'],
  admin: ['read:posts', 'write:posts', 'delete:posts'],
};

function requirePermission(permission: string) {
  return (req: Request, res: Response, next: NextFunction) => {
    const userRole = req.user?.role;
    if (!ROLES[userRole]?.includes(permission)) {
      return res.status(403).json({ error: 'Forbidden' });
    }
    next();
  };
}

代码审查清单

  • [ ] 使用bcrypt哈希密码(成本≥12)
  • [ ] JWT密钥强度足够(256位)
  • [ ] Cookie设置为httpOnly、secure、sameSite
  • [ ] 登录接口实施速率限制
  • [ ] 所有路由都有认证中间件
  • [ ] 资源级授权

反模式

  1. 将JWT存储在localStorage中 - 使用httpOnly cookie
  2. 弱密码 - 强制执行复杂性
  3. 无速率限制 - 防止暴力攻击
  4. 仅客户端认证 - 始终在服务器端验证