分享

官方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 的开发者!

评论

加载中...
登录 后可以发表评论