Skip to content

认证和授权课程计划

课程概述

本课程分为 8 节课,每节课 20-40 分钟,总时长约 120-150 分钟。通过理论讲解和实践操作,深入理解 JWT 和 OAuth 2.0 的认证授权方法。

第 1 课:课程介绍与环境准备(5 分钟)

学习目标

  • 了解课程内容和目标
  • 搭建开发环境
  • 项目初始化

课程内容

  1. 课程介绍

    • 认证和授权的区别
    • JWT 和 OAuth 2.0 的特点
    • 课程结构安排
  2. 环境准备

    • 安装依赖
    • 配置开发环境
    • 初始化项目

实践操作

bash
# 安装依赖
npm install jsonwebtoken bcrypt express

# 初始化项目
npm init -y

预期输出

✅ 依赖安装成功
✅ 项目初始化完成

第 2 课:JWT 基础(15 分钟)

学习目标

  • 理解 JWT 的结构和原理
  • 掌握 JWT 的生成和验证
  • 学习 JWT 的最佳实践

课程内容

  1. JWT 结构

    • Header、Payload、Signature
    • 编码和签名
    • 算法选择
  2. JWT 生成

    • 使用 jsonwebtoken 库
    • 设置过期时间
    • 自定义声明
  3. JWT 验证

    • 验证签名
    • 验证过期时间
    • 错误处理

实践操作

javascript
const jwt = require('jsonwebtoken');

// 生成 JWT
const token = jwt.sign(
  { userId: 123, email: 'user@example.com' },
  'your-secret-key',
  { expiresIn: '1h' }
);

console.log('JWT:', token);

// 验证 JWT
try {
  const decoded = jwt.verify(token, 'your-secret-key');
  console.log('Decoded:', decoded);
} catch (err) {
  console.error('Invalid token:', err.message);
}

测试验证

bash
node examples/jwt-basic.js

预期输出

JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Decoded: { userId: 123, email: 'user@example.com', iat: ..., exp: ... }

第 3 课:JWT 中间件实现(15 分钟)

学习目标

  • 理解中间件的工作原理
  • 实现 JWT 认证中间件
  • 学习错误处理

课程内容

  1. 中间件原理

    • Express 中间件
    • 请求处理流程
    • next() 调用
  2. JWT 中间件

    • 提取令牌
    • 验证令牌
    • 附加用户信息
  3. 错误处理

    • 认证失败
    • 令牌过期
    • 统一错误响应

实践操作

javascript
const jwt = require('jsonwebtoken');

function authMiddleware(req, res, next) {
  // 提取令牌
  const token = req.headers.authorization?.split(' ')[1];

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

  try {
    // 验证令牌
    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    req.user = decoded;
    next();
  } catch (err) {
    return res.status(401).json({ error: 'Invalid token' });
  }
}

module.exports = authMiddleware;

测试验证

bash
node test/middleware.test.js

预期输出

✅ JWT middleware tests passed

第 4 课:OAuth 2.0 基础(15 分钟)

学习目标

  • 理解 OAuth 2.0 的授权流程
  • 掌握授权码模式
  • 学习 OAuth 2.0 的角色

课程内容

  1. OAuth 2.0 概念

    • 四种角色
    • 四种授权模式
    • 授权流程
  2. 授权码模式

    • 授权请求
    • 用户授权
    • 令牌交换
  3. 客户端配置

    • 注册应用
    • 获取 Client ID
    • 配置回调 URL

实践操作

javascript
const { OAuth2Client } = require('google-auth-library');

const oauth2Client = new OAuth2Client(
  process.env.GOOGLE_CLIENT_ID,
  process.env.GOOGLE_CLIENT_SECRET,
  'http://localhost:3000/callback'
);

// 生成授权 URL
const authUrl = oauth2Client.generateAuthUrl({
  access_type: 'offline',
  scope: 'https://www.googleapis.com/auth/userinfo.email'
});

console.log('Authorization URL:', authUrl);

// 交换令牌
const { tokens } = await oauth2Client.getToken(code);
console.log('Access Token:', tokens.access_token);

测试验证

bash
node examples/oauth-basic.js

预期输出

Authorization URL: https://accounts.google.com/o/oauth2/v2/auth?...
Access Token: ya29.a0AfH6...

第 5 课:用户认证系统(20 分钟)

学习目标

  • 实现用户注册和登录
  • 掌握密码哈希和验证
  • 学习会话管理

课程内容

  1. 用户注册

    • 数据验证
    • 密码哈希
    • 保存用户
  2. 用户登录

    • 验证凭证
    • 生成 JWT
    • 返回令牌
  3. 密码安全

    • bcrypt 哈希
    • 盐值管理
    • 密码强度验证

实践操作

javascript
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');

// 注册
async function register(name, email, password) {
  // 哈希密码
  const hashedPassword = await bcrypt.hash(password, 10);

  // 保存用户
  const user = await User.create({
    name,
    email,
    password: hashedPassword
  });

  return user;
}

// 登录
async function login(email, password) {
  // 查找用户
  const user = await User.findOne({ email });
  if (!user) {
    throw new Error('User not found');
  }

  // 验证密码
  const isValid = await bcrypt.compare(password, user.password);
  if (!isValid) {
    throw new Error('Invalid password');
  }

  // 生成 JWT
  const token = jwt.sign(
    { userId: user.id, email: user.email },
    process.env.JWT_SECRET,
    { expiresIn: '1h' }
  );

  return { token, user };
}

测试验证

bash
npm test

预期输出

✅ User registration tests passed
✅ User login tests passed

第 6 课:权限控制(15 分钟)

学习目标

  • 理解 RBAC 模型
  • 实现权限检查中间件
  • 学习角色管理

课程内容

  1. RBAC 模型

    • 用户、角色、权限
    • 多对多关系
    • 权限继承
  2. 权限检查

    • 提取用户权限
    • 验证所需权限
    • 权限拒绝
  3. 角色管理

    • 分配角色
    • 撤销角色
    • 角色权限

实践操作

javascript
// 权限中间件
function requirePermission(permission) {
  return async (req, res, next) => {
    // 查询用户权限
    const user = await User.findById(req.user.userId).populate('role');
    const permissions = user.role.permissions;

    // 检查权限
    if (!permissions.includes(permission)) {
      return res.status(403).json({ error: 'Forbidden' });
    }

    next();
  };
}

// 使用
app.get('/admin', authMiddleware, requirePermission('admin'), (req, res) => {
  res.json({ message: 'Welcome admin' });
});

测试验证

bash
node test/permission.test.js

预期输出

✅ Permission tests passed

第 7 课:OAuth 2.0 集成(20 分钟)

学习目标

  • 实现 OAuth 2.0 授权服务器
  • 实现第三方登录
  • 学习令牌管理

课程内容

  1. 授权服务器

    • 授权端点
    • 令牌端点
    • 客户端验证
  2. 第三方登录

    • Google 登录
    • GitHub 登录
    • 微信登录
  3. 令牌管理

    • 访问令牌
    • 刷新令牌
    • 令牌撤销

实践操作

javascript
// OAuth 服务器
app.get('/oauth/authorize', (req, res) => {
  // 生成授权码
  const code = generateAuthCode(req.query);
  
  // 重定向到客户端
  res.redirect(`${req.query.redirect_uri}?code=${code}&state=${req.query.state}`);
});

app.post('/oauth/token', async (req, res) => {
  // 验证授权码
  const authCode = await validateAuthCode(req.body.code);
  
  // 生成令牌
  const accessToken = generateToken(authCode);
  const refreshToken = generateRefreshToken(authCode);
  
  res.json({
    access_token: accessToken,
    refresh_token: refreshToken,
    token_type: 'Bearer',
    expires_in: 3600
  });
});

测试验证

bash
node examples/oauth-server.js

预期输出

OAuth server running at http://localhost:3000

第 8 课:总结与扩展(15 分钟)

学习目标

  • 回顾课程内容
  • 总结核心概念
  • 探索扩展方向

课程内容

  1. 课程回顾

    • JWT 认证
    • OAuth 2.0 授权
    • 用户管理
    • 权限控制
  2. 核心概念总结

    • 无状态认证
    • 授权流程
    • 安全最佳实践
    • 性能优化
  3. 扩展方向

    • 刷新令牌实现
    • 多因素认证
    • 权限管理
    • 会话管理
    • 审计日志

实践操作

bash
# 运行所有测试
npm test

# 思考如何扩展功能
# 实现刷新令牌、2FA 等功能

预期输出

✅ 所有测试通过

学习成果

完成本课程后,你将能够:

  1. ✅ 理解 JWT 和 OAuth 2.0 的核心概念
  2. ✅ 实现完整的用户认证系统
  3. ✅ 掌握权限控制和 RBAC
  4. ✅ 集成第三方登录
  5. ✅ 构建安全的 API 接口

参考资源

下一步

完成本课程后,你可以继续学习:

  • WebSocket 实时通信
  • 微服务架构
  • 容器化部署(Docker)
  • CI/CD 持续集成

所有教学材料已保存。准备录制。


架构师AI杜公众号二维码

扫描二维码关注"架构师AI杜"公众号,获取更多技术内容和最新动态