迁移说明:从直接 OAuth 登录改为代理登录#
原项目直接在前端/客户端处理 GitHub/Gitee OAuth 登录,需要:
- 在前端配置 Client ID 和 Client Secret(不安全)
- 每个环境都要在 OAuth 应用后台配置不同的回调地址
- 前端直接处理授权码换取 Token 的流程
新方案:使用代理登录服务#
已部署代理登录服务 http://47.107.74.235:9011 ,统一处理 GitHub/Gitee OAuth 流程。
需要修改的内容 1. 移除前端的 OAuth 配置#
删除:
- 前端代码中的 client_id 和 client_secret
- 前端直接调用 GitHub/Gitee Token 接口的代码 2. 修改登录跳转逻辑
原代码(直接跳转 GitHub):
1
2
3
4
5
| // 原方式:直接跳转到 GitHub
window.location.href = `https://
github.com/login/oauth/authorize?
client_id=${CLIENT_ID}&
redirect_uri=${CALLBACK_URL}`;
|
新代码(通过代理服务):
1
2
3
4
5
6
7
8
9
| // 新方式:通过代理服务跳转
const redirectUrl =
encodeURIComponent('http://your-app.
com/auth/callback');
window.location.href = `http://47.
107.74.235:9011/login/github?
redirect=${redirectUrl}`;
``` 3. 修改回调处理逻辑
原代码(前端处理回调):
|
// 原方式:前端用 code 换取 token
const response = await fetch
(‘https://github.com/login/oauth/
access_token’, {
method: ‘POST’,
body: { client_id, client_secret,
code }
});
// 新方式:代理服务已完成登录,直接获取结
果
// 访问回调地址后会自动返回 JSON 数据:
{
“success”: true,
“provider”: “github”,
“access_token”: “gho_xxxxxx”,
“user”: {
“id”: “16174596”,
“username”: “tongjinlv”,
“email”: “xxx@qq.com”,
“name”: “童惊宇”,
“avatar”: “https://avatars.
githubusercontent.com/…”
},
“redirect_url”: “http://your-app.
com/auth/callback”
}
1
2
3
4
5
6
7
8
9
10
11
12
| - 在代理服务的 config.yaml 中已配置统一的回调地址
- 在 GitHub/Gitee OAuth 应用后台只需配置一个回调地址: http://47.107.74.235:9011/callback/github 或 /callback/gitee
- 你的应用通过 redirect 参数指定实际跳转回来的地址
### 优势
1. 更安全 :Client Secret 不再暴露在前端
2. 更简单 :无需为每个环境配置不同的 OAuth 应用
3. 统一 :多环境(dev/staging/prod)使用同一个代理服务
### API 端点
- 登录 : GET http://47.107.74.235:9011/login/:provider?redirect=你的回调地址
- :provider 可以是 github 或 gitee
- 代理登录 (已有 code 时): POST http://47.107.74.235:9011/proxy/login
- Body: { "provider": "github", "code": "授权码" }
|