feat(auth): 服务端托管 Google OAuth,desktop 轮询登录;补充服务端环境变量文档
Some checks failed
Secrets v3 CI / 检查 (push) Failing after 2m6s
Some checks failed
Secrets v3 CI / 检查 (push) Failing after 2m6s
This commit is contained in:
42
README.md
42
README.md
@@ -27,8 +27,42 @@ cargo run -p secrets-desktop
|
||||
- `apps/desktop/src-tauri/tauri.conf.json` 中 `build.frontendDist` 指向 `apps/desktop/dist`
|
||||
- 当前仓库会直接提交 `apps/desktop/dist/` 下的桌面端静态资源
|
||||
- 因此新机器 clone 后,无需额外前端构建步骤即可启动 desktop
|
||||
- Google Desktop OAuth 的 `client_secret_*.json` **不会入库**
|
||||
- 新机器需要自行提供该文件,并通过 `GOOGLE_OAUTH_CLIENT_FILE` 指向它;推荐使用绝对路径
|
||||
- 官网 DMG 正式分发不依赖本地 `client_secret_*.json`
|
||||
- Google OAuth 凭据只配置在 API 服务端,desktop 通过浏览器完成托管登录
|
||||
|
||||
## 官网 DMG 的服务端 OAuth 配置
|
||||
|
||||
官网 DMG 正式分发时,**Google OAuth 只配置在 API 服务端**。桌面端不需要本地 `client_secret_*.json`,也不直接向 Google 换 token。
|
||||
|
||||
建议先复制 `deploy/.env.example` 为 `.env`,然后至少配置以下变量:
|
||||
|
||||
```bash
|
||||
SECRETS_PUBLIC_BASE_URL=https://secrets.example.com
|
||||
GOOGLE_OAUTH_CLIENT_ID=your-google-oauth-client-id.apps.googleusercontent.com
|
||||
GOOGLE_OAUTH_CLIENT_SECRET=your-google-oauth-client-secret
|
||||
GOOGLE_OAUTH_REDIRECT_URI=https://secrets.example.com/auth/google/callback
|
||||
```
|
||||
|
||||
变量含义:
|
||||
|
||||
- `SECRETS_PUBLIC_BASE_URL`:桌面端打开浏览器时访问的 API 外网基地址,必须是用户浏览器能访问到的公开地址
|
||||
- `GOOGLE_OAUTH_CLIENT_ID`:Google Cloud Console 中为服务端登录流程配置的 OAuth Client ID
|
||||
- `GOOGLE_OAUTH_CLIENT_SECRET`:对应的 Client Secret,只能保留在服务端
|
||||
- `GOOGLE_OAUTH_REDIRECT_URI`:Google 登录完成后回调到 API 的地址,必须与 Google Console 中登记的回调地址完全一致
|
||||
|
||||
配置步骤建议:
|
||||
|
||||
1. 在 Google Cloud Console 创建或选择 OAuth Client
|
||||
2. 把授权回调地址加入允许列表,例如 `https://secrets.example.com/auth/google/callback`
|
||||
3. 把上面的 4 个变量配置到 API 服务的运行环境中
|
||||
4. 确认 `SECRETS_PUBLIC_BASE_URL` 与 `GOOGLE_OAUTH_REDIRECT_URI` 使用同一公开域名
|
||||
5. 重启 API 服务后,再用 desktop / DMG 验证浏览器登录流程
|
||||
|
||||
注意:
|
||||
|
||||
- `GOOGLE_OAUTH_CLIENT_SECRET` 不要提交到仓库
|
||||
- `GOOGLE_OAUTH_REDIRECT_URI` 不要写成 `localhost`,正式分发应使用官网可访问域名
|
||||
- 如果 API 部署在反向代理后面,`SECRETS_PUBLIC_BASE_URL` 应填写用户实际访问的 HTTPS 地址,而不是内网监听地址
|
||||
|
||||
## 当前能力
|
||||
|
||||
@@ -144,8 +178,8 @@ cargo test --locked
|
||||
当前登录流为 Google Desktop OAuth:
|
||||
|
||||
- 桌面端使用系统浏览器拉起 Google 授权
|
||||
- 使用本地 loopback callback + PKCE
|
||||
- API 校验 Google userinfo 后发放 `device token`
|
||||
- API 服务端负责发起 OAuth、处理 callback、校验 Google userinfo
|
||||
- desktop 通过创建一次性 login session 并轮询状态获取 `device token`
|
||||
- 登录与设备活动写入 `auth_events`
|
||||
|
||||
## 项目结构
|
||||
|
||||
Reference in New Issue
Block a user