Blame view

python-app-demo/README.md 2.12 KB
cccb7cfc   tangwang   init
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
  # Python OAuth2 认证服务器
  
  这是一个用 Flask 编写的 OAuth2 认证服务器,实现了与 Node.js 版本相同的功能。
  
  ## 功能特性
  
  - ✅ OAuth2 认证流程
  - ✅ HMAC-SHA256 签名验证
  - ✅ Timing-safe 比较防止时序攻击
  - ✅ 支持 Shopify OAuth 集成
  - ✅ CORS 跨域支持
  - ✅ 环境变量配置
  
  ## 快速开始
  
  ### 1. 安装依赖
  
  ```bash
  pip install -r requirements.txt
  ```
  
  ### 2. 运行服务器
  
  ```bash
  python main.py
  ```
  
  服务器将在 `http://localhost:4000` 运行
  
  ## API 端点
  
  ### 1. 启动 OAuth 认证
  
  ```
  GET /api/auth?shop=example.myshopify.com
  ```
  
  重定向用户到 Shopify 授权页面。
  
  ### 2. OAuth 回调处理
  
  ```
  GET /api/auth/callback?code=xxx&hmac=xxx&state=xxx&shop=example.myshopify.com
  ```
  
  - 验证 HMAC 签名
  - 交换授权码获取访问令牌
  - 返回令牌信息
  
  ## 项目结构
  
  ```
  python-app-demo/
  ├── main.py           # 主应用文件
  ├── requirements.txt  # Python 依赖
  ├── .env             # 环境变量(需要自己创建)
  └── README.md        # 说明文档
  ```
  
  ## 与 Node.js 版本的对应关系
  
  | Node.js (devServer) | Python (python-app-demo) |
  |-------------------|----------------------|
  | Express 服务器 | Flask 服务器 |
  | hmacValidatorMiddleWare | @hmac_validator 装饰器 |
  | secureCompare | secure_compare 函数 |
  | crypto.timingSafeEqual | hmac.compare_digest |
  | /api/auth | /api/auth 路由 |
  | /api/auth/callback | /api/auth/callback 路由 |
  
  ## 安全特性
  
  1. **HMAC-SHA256 验证**:所有回调请求都通过 HMAC 签名验证
  2. **Timing-safe 比较**:使用 `hmac.compare_digest` 防止时序攻击
  3. **环境变量管理**:敏感配置存储在 `.env` 文件中
  4. **CORS 支持**:安全的跨域资源共享
  
  ## 使用 curl 测试
  
  ```bash
  # 测试认证端点
  curl "http://localhost:4000/api/auth?shop=example.myshopify.com"
  
  # 测试回调端点(需要有效的HMAC)
  curl "http://localhost:4000/api/auth/callback?code=test&hmac=xxx&state=xxx&shop=example.myshopify.com"
  ```
  
  ## 完成!
  
  现在您有一个完整的 Python OAuth2 认证服务器,功能与 Node.js 版本完全相同。🚀