Files
pdnode-account/demo-oauth-flow.md
Bret 66a901c676 v.0.2.0-beta
目前oauth已经可以正常使用
2025-07-29 17:20:26 -07:00

4.1 KiB
Raw Permalink Blame History

OAuth 2.0 授权流程演示

概述

本演示展示了完整的OAuth 2.0授权码流程,包括用户同意授权的步骤。

系统架构

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│  第三方应用  │    │  OAuth提供商 │    │    用户     │
│ (Client App)│    │ (Your App)  │    │   (User)   │
└─────────────┘    └─────────────┘    └─────────────┘

完整流程演示

步骤 1: 启动服务

# 启动后端API服务
npm start

# 启动前端服务
npm run dev:frontend

步骤 2: 用户注册和登录

  1. 访问 http://localhost:3001
  2. 注册新用户或登录现有用户
  3. 进入个人中心

步骤 3: 创建OAuth客户端

  1. 在个人中心点击"创建OAuth客户端"
  2. 填写应用信息:
    • 应用名称:测试应用
    • 应用描述这是一个测试OAuth流程的应用
    • 重定向URIhttp://localhost:3001/third-party-app.html
  3. 创建客户端并记录客户端ID和密钥

步骤 4: 使用第三方应用示例

  1. 打开第三方应用示例:http://localhost:3001/third-party-app.html
  2. 填入刚才创建的客户端ID和密钥
  3. 点击"开始OAuth授权"按钮

步骤 5: 授权流程

  1. 系统重定向到授权页面:http://localhost:3001/oauth/authorize
  2. 用户看到应用信息和请求的权限
  3. 用户选择"同意授权"或"拒绝授权"

步骤 6: 获取访问令牌

  1. 如果用户同意授权,系统会重定向回第三方应用
  2. 第三方应用使用授权码交换访问令牌
  3. 使用访问令牌获取用户信息

API 端点说明

1. 获取授权信息

GET /api/oauth/authorize
  • 验证OAuth请求参数
  • 返回应用信息和请求的权限
  • 不直接生成授权码

2. 用户同意/拒绝授权

POST /api/oauth/authorize/consent
  • 处理用户的授权决定
  • 如果同意,生成授权码
  • 如果拒绝,返回错误信息

3. 交换访问令牌

POST /api/oauth/token
  • 使用授权码交换访问令牌
  • 返回访问令牌和刷新令牌

4. 获取用户信息

GET /api/oauth/userinfo
  • 使用访问令牌获取用户信息

安全特性

1. 用户同意机制

  • 用户必须明确同意才能获得授权码
  • 显示详细的应用信息和权限范围
  • 用户可以拒绝授权

2. 令牌安全

  • 访问令牌有过期时间
  • 支持刷新令牌机制
  • 令牌可以撤销

3. 客户端验证

  • 验证客户端ID和密钥
  • 验证重定向URI
  • 防止重放攻击

测试方法

1. 自动化测试

npm run test:oauth-flow

2. 手动测试

  1. 使用前端界面测试
  2. 使用第三方应用示例测试
  3. 使用curl命令测试

3. 错误测试

  • 测试无效的客户端ID
  • 测试无效的重定向URI
  • 测试过期的授权码
  • 测试用户拒绝授权

常见问题

Q: 为什么需要用户同意?

A: 这是OAuth 2.0的核心安全特性,确保用户对第三方应用的授权是明确和可控的。

Q: 授权码可以重复使用吗?

A: 不可以,授权码只能使用一次,使用后立即失效。

Q: 访问令牌过期怎么办?

A: 使用刷新令牌获取新的访问令牌,无需用户重新授权。

Q: 如何撤销授权?

A: 可以通过撤销刷新令牌来撤销授权,用户需要重新授权。

扩展功能

1. 权限范围管理

  • 支持细粒度的权限控制
  • 用户可以部分授权某些权限

2. 应用管理

  • 用户可以查看和管理已授权的应用
  • 支持撤销特定应用的授权

3. 审计日志

  • 记录所有授权和撤销操作
  • 提供安全审计功能

总结

这个OAuth 2.0实现提供了完整的授权码流程,包括:

  1. 用户同意机制
  2. 安全的令牌管理
  3. 完整的API端点
  4. 友好的用户界面
  5. 详细的测试和文档

这确保了OAuth授权的安全性和用户体验的平衡。