分享
官方Skill里的OAuth集成部分有问题,对照文档后修改成功,分享踩坑经验
## 问题背景
接入 SecondMe OAuth 登录时,按照 skill 文档中的配置调用 token 接口,结果遇到了 **404** 和 **405** 错误。
## Skill 文档 vs 实际 API
| 项目 | Skill 文档 | 实际 API |
|------|-----------|---------|
| **Token Endpoint** | `/api/oauth/token` | `/api/oauth/token/code` |
| **请求格式** | JSON (`application/json`) | Form (`application/x-www-form-urlencoded`) |
| **响应格式** | 标准 OAuth2 (`access_token`, `refresh_token`) | 包装格式 `{ code: 0, data: { accessToken, ... } }` |
## 踩坑过程
### 1. 第一次尝试(404 错误)
```typescript
// 错误的 endpoint
const endpoint = "https://app.mindos.com/gate/lab/api/oauth/token";
// 返回 404 Not Found
```
### 2. 第二次尝试(405 错误)
```typescript
// 换了一个猜测的地址
const endpoint = "https://go.second.me/oauth/token";
// 返回 405 MethodNotAllowed(实际是 S3 的错误页面)
```
### 3. 正确的调用方式
```bash
curl -X POST "https://app.mindos.com/gate/lab/api/oauth/token/code" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code" \
-d "code=lba_ac_xxxxx..." \
-d "redirect_uri=https://your-app.com/callback" \
-d "client_id=your_client_id" \
-d "client_secret=your_client_secret"
```
## 修复后的代码
```typescript
// 使用 application/x-www-form-urlencoded 格式
const formData = new URLSearchParams();
formData.append("grant_type", "authorization_code");
formData.append("code", code);
formData.append("redirect_uri", OAUTH_CONFIG.redirectUri);
formData.append("client_id", OAUTH_CONFIG.clientId);
formData.append("client_secret", OAUTH_CONFIG.clientSecret);
const response = await fetch(
"https://app.mindos.com/gate/lab/api/oauth/token/code",
{
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
Accept: "application/json",
},
body: formData.toString(),
}
);
const result = await response.json();
// 响应格式: { code: 0, data: { accessToken, refreshToken, expiresIn } }
if (result.code !== 0 || !result.data) {
return null;
}
const { accessToken, refreshToken, expiresIn } = result.data;
```
## 关键差异总结
1. **Endpoint 路径**:多了 `/code` 后缀
2. **Content-Type**:必须用 `application/x-www-form-urlencoded`,不能用 JSON
3. **响应结构**:外层有 `code` 和 `data` 包装,字段名是 camelCase
## 给开发者的建议
1. 参考 skill 文档时,最好对照官方最新的 API 文档确认
2. 遇到 404/405 时,先确认 endpoint 路径是否正确
3. 如果 API 返回奇怪的错误(如 S3 XML),说明请求根本没到达正确的服务
---
希望这个分享能帮助到其他接入 SecondMe OAuth 的开发者!
评论
加载中...
登录 后可以发表评论