# Testing Mobile API Authentication

> 测试移动应用 API 的认证与授权机制，识别认证失效、不安全的令牌管理、会话固定、 权限提升和 IDOR 漏洞。适用于对移动应用后端进行 API 安全评估、测试 JWT 实现、 评估 OAuth 流程或评估会话管理的场景。适合涉及移动 API 认证测试、令牌安全评估、 OAuth 移动端流程测试或 API 授权绕过的相关请求。

- Skill: `killvxk/testing-mobile-api-authentication` (Agent Skill, multi-file: 8 files)
- Install (CLI): `npx skillmds@latest add killvxk/testing-mobile-api-authentication`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/testing-mobile-api-authentication/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/testing-mobile-api-authentication

---

# 测试移动应用 API 认证

## 适用场景

适用于以下情况：
- 在渗透测试中评估移动应用后端 API 认证机制
- 测试 JWT 实现中的常见漏洞（none 算法、弱签名密钥）
- 评估移动应用中 OAuth 2.0 / OIDC 流程的重定向、PKCE 和权限范围问题
- 测试 API 端点中的 BOLA/IDOR（对象级授权失效）漏洞

**不适用场景**：未经明确授权且无速率限制意识，不得对生产 API 使用此技能。

## 前置条件

- Burp Suite 或 mitmproxy 已配置为移动设备代理
- 目标应用已绕过 SSL 固定（如已实现）
- 目标应用的有效测试账户凭据
- Postman 或 curl 用于构造 API 请求
- jwt.io 或 PyJWT 用于 JWT 分析与篡改

## 工作流程

### 步骤 1：映射认证端点

拦截移动应用流量，识别认证相关端点：

```
POST /api/v1/auth/login          - 初始认证
POST /api/v1/auth/register       - 账户注册
POST /api/v1/auth/refresh        - Token 刷新
POST /api/v1/auth/logout         - 会话终止
POST /api/v1/auth/forgot-password - 密码重置
POST /api/v1/auth/verify-otp     - OTP 验证
GET  /api/v1/auth/me             - 已认证用户信息
```

### 步骤 2：分析 Token 格式与安全性

**JWT 分析：**
```bash
# 不验证签名直接解码 JWT
echo "eyJhbGciOiJIUzI1NiIs..." | cut -d. -f2 | base64 -d 2>/dev/null

# 检查常见 JWT 漏洞：
# 1. None 算法攻击
# 修改 Header 为：{"alg":"none","typ":"JWT"}
# 去掉签名：header.payload.

# 2. 算法混淆（RS256 改为 HS256）
# 若服务器使用 RS256，尝试以公钥作为 secret 使用 HS256

# 3. 弱签名密钥
# 使用 hashcat 或 jwt-cracker 爆破 HMAC secret
hashcat -m 16500 jwt.txt wordlist.txt

# 4. 过期时间绕过
# 修改 "exp" 声明为未来时间戳
```

**不透明 Token 分析：**
```
- 测试 Token 长度和熵值
- 检查 Token 是否具有顺序性或可预测性
- 测试登出后 Token 是否可复用
- 验证密码修改后 Token 是否失效
```

### 步骤 3：测试认证绕过

```bash
# 测试无认证访问
curl -X GET https://api.target.com/api/v1/users/profile

# 使用空/null Token 测试
curl -X GET https://api.target.com/api/v1/users/profile \
  -H "Authorization: Bearer "

curl -X GET https://api.target.com/api/v1/users/profile \
  -H "Authorization: Bearer null"

# 使用过期 Token 测试（应返回失败）
curl -X GET https://api.target.com/api/v1/users/profile \
  -H "Authorization: Bearer <过期_token>"

# 使用其他用户 Token 测试
curl -X GET https://api.target.com/api/v1/users/123/profile \
  -H "Authorization: Bearer <用户456的_token>"
```

### 步骤 4：测试 IDOR（对象级授权失效）

```bash
# 修改请求路径中的用户 ID
curl -X GET https://api.target.com/api/v1/users/123/orders \
  -H "Authorization: Bearer <用户456的_token>"

# 修改请求体中的对象 ID
curl -X PUT https://api.target.com/api/v1/orders/789 \
  -H "Authorization: Bearer <用户456的_token>" \
  -d '{"status": "cancelled"}'

# 测试横向权限提升
# 使用普通用户 Token 访问管理员端点
curl -X GET https://api.target.com/api/v1/admin/users \
  -H "Authorization: Bearer <普通用户_token>"
```

### 步骤 5：测试会话管理

```bash
# 测试并发会话
# 从多台设备同时登录——两个会话是否均保持有效？

# 测试登出后 Token 失效
TOKEN=$(curl -s -X POST https://api.target.com/api/v1/auth/login \
  -d '{"email":"test@test.com","password":"pass"}' | jq -r '.token')

# 执行登出
curl -X POST https://api.target.com/api/v1/auth/logout \
  -H "Authorization: Bearer $TOKEN"

# 尝试使用相同 Token（应返回失败）
curl -X GET https://api.target.com/api/v1/users/me \
  -H "Authorization: Bearer $TOKEN"

# 测试密码修改后 Token 失效
# 密码修改前获取的 Token 应在修改后失效
```

### 步骤 6：测试 OAuth 2.0 / OIDC 移动端流程

```bash
# 测试授权码拦截
# 检查是否强制使用 PKCE（Proof Key for Code Exchange）
# 测试缺少 code_verifier 参数的情况

# 测试重定向 URI 操纵
# 尝试自定义 Scheme 劫持：myapp://callback
# 测试修改 redirect_uri 参数

# 测试权限范围提升
# 请求超出已授权的权限范围
```

## 核心概念

| 术语 | 定义 |
|------|------|
| **BOLA/IDOR** | 对象级授权失效——通过修改标识符访问资源，而服务端未进行授权检查 |
| **JWT** | JSON Web Token——包含 Header、Payload 和 Signature 的自包含认证令牌 |
| **PKCE** | Proof Key for Code Exchange——防止移动应用授权码被拦截的 OAuth 2.0 扩展 |
| **Token 刷新** | 使用长期有效的刷新令牌获取新访问令牌的机制，无需重新认证 |
| **会话固定（Session Fixation）** | 攻击者在受害者认证前预设已知会话 ID，随后劫持该会话的攻击方式 |

## 工具与系统

- **Burp Suite**：HTTP 代理，用于拦截和修改认证请求
- **jwt_tool**：Python 工具，用于测试 JWT 漏洞（none 算法、密钥混淆、声明篡改）
- **Postman**：API 测试客户端，用于构造认证请求
- **hashcat**：密码/JWT secret 爆破工具，用于测试 HMAC 签名密钥强度
- **Autorize**：Burp Suite 插件，用于自动化授权测试

## 常见问题

- **速率限制掩盖问题**：API 可能对测试请求进行速率限制。需在请求间添加延迟，并先从测试者已授权的视角进行测试。
- **URL 中的 Token**：部分移动 API 将 Token 作为 URL 查询参数传递，使其暴露在服务器日志和浏览器历史中。即使授权功能正常，也应标记为发现项。
- **刷新令牌轮换**：部分 API 在每次使用刷新令牌后进行轮换。若测试使刷新令牌失效，可能导致测试账户被锁定。
- **移动端特定 OAuth**：移动应用使用自定义 URI Scheme 进行 OAuth 重定向，可能被注册了相同 Scheme 的恶意应用拦截。

