Appearance
认证和授权核心功能实现
这是一个最小但完整的认证和授权实现,展示了 JWT 和 OAuth 2.0 的核心概念和实现方式。
项目结构
auth-system/
├── src/
│ ├── jwt/
│ │ ├── generator.js # JWT 生成器
│ │ ├── verifier.js # JWT 验证器
│ │ └── middleware.js # JWT 中间件
│ ├── oauth/
│ │ ├── server.js # OAuth 服务器
│ │ ├── client.js # OAuth 客户端
│ │ └── middleware.js # OAuth 中间件
│ ├── models/
│ │ ├── user.js # 用户模型
│ │ ├── role.js # 角色模型
│ │ └── permission.js # 权限模型
│ ├── middleware/
│ │ ├── auth.js # 认证中间件
│ │ └── permission.js # 权限中间件
│ └── services/
│ ├── auth-service.js # 认证服务
│ └── oauth-service.js # OAuth 服务
├── test/
│ ├── jwt/
│ │ ├── generator.test.js # JWT 生成测试
│ │ └── verifier.test.js # JWT 验证测试
│ └── oauth/
│ ├── server.test.js # OAuth 服务器测试
│ └── client.test.js # OAuth 客户端测试
├── package.json
└── README.md安装依赖
bash
npm install运行测试
bash
npm test核心功能
1. JWT 认证
实现 JWT 生成、验证和中间件。
2. OAuth 2.0
实现 OAuth 2.0 授权服务器和客户端。
3. 用户管理
实现用户注册、登录和权限管理。
4. 认证中间件
实现 JWT 和 OAuth 认证中间件。
使用示例
使用 JWT
javascript
const { AuthService } = require('./src/services');
const authService = new AuthService();
// 用户注册
const user = await authService.register({
name: '张三',
email: 'zhangsan@example.com',
password: 'password123'
});
// 用户登录
const token = await authService.login({
email: 'zhangsan@example.com',
password: 'password123'
});
console.log('JWT Token:', token);使用 OAuth
javascript
const { OAuthService } = require('./src/services');
const oauthService = new OAuthService();
// 获取授权 URL
const authUrl = oauthService.getAuthorizationUrl({
clientId: 'your-client-id',
redirectUri: 'http://localhost:3000/callback',
scope: 'read write'
});
console.log('Authorization URL:', authUrl);
// 交换令牌
const tokens = await oauthService.exchangeCodeForToken({
code: 'authorization-code-from-callback',
clientId: 'your-client-id',
clientSecret: 'your-client-secret',
redirectUri: 'http://localhost:3000/callback'
});
console.log('Access Token:', tokens.accessToken);
console.log('Refresh Token:', tokens.refreshToken);可扩展功能点
1. 刷新令牌
实现 JWT 刷新机制:
javascript
// TODO: 实现刷新令牌
async function refreshToken(refreshToken) {
// 验证刷新令牌
// 生成新的访问令牌
// 返回新的令牌对
}2. 多因素认证
添加 2FA 支持:
javascript
// TODO: 实现多因素认证
async function enable2FA(userId, secret) {
// 生成 TOTP 密钥
// 保存到用户记录
// 返回 QR 码
}
async function verify2FA(userId, code) {
// 验证 TOTP 码
// 返回验证结果
}3. 权限管理
实现基于角色的访问控制:
javascript
// TODO: 实现权限管理
class RBAC {
async hasPermission(userId, permission) {
// 查询用户角色
// 查询角色权限
// 检查是否有所需权限
}
async assignRole(userId, roleId) {
// 分配角色给用户
}
async grantPermission(roleId, permission) {
// 授予权限给角色
}
}4. 会话管理
实现会话黑名单:
javascript
// TODO: 实现会话黑名单
class SessionBlacklist {
constructor(redis) {
this.redis = redis;
}
async add(token, expiresIn) {
// 将令牌加入黑名单
await this.redis.setex(
`blacklist:${token}`,
expiresIn,
'1'
);
}
async isBlacklisted(token) {
// 检查令牌是否在黑名单
const exists = await this.redis.exists(`blacklist:${token}`);
return exists === 1;
}
}5. 审计日志
记录用户操作日志:
javascript
// TODO: 实现审计日志
class AuditLogger {
async log(action, userId, details) {
// 记录用户操作
// 保存到数据库
// 用于安全审计
}
}下一步
查看 05-lesson-plan.md 了解详细的课程计划。

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