feat(dcauth): 移除机器码,改用纯设备码认证
- DCAuth 协议升级到 v2,签名原文只含设备码;客户端 2.0.0,旧版本返回 426 - 删除客户端机器码采集、后端 machine_code_* 字段与日志、后台机器码展示 - 102 迁移在生产执行前直接改为无机器码结构;SQL 守卫仅放行该文件 - Mock 短信不启用每日限额;修复慢电脑首次启动的协议转发竞态 - 新增 macOS DCAuth.app 打包脚本,注册 dcauth:// 协议,浏览器可直接唤起
This commit is contained in:
+34
-7
@@ -5,7 +5,7 @@
|
||||
## 运行方式
|
||||
|
||||
- **Windows**:GUI 常驻程序。启动后进入系统托盘,通过协议唤起时只出现一个登录确认窗口;成功后在托盘气泡中提示,不再连续弹多个消息框。
|
||||
- **macOS**:后台常驻进程,使用系统图形对话框确认登录。重复执行命令会转发给已有进程,不会叠加实例。
|
||||
- **macOS**:`DCAuth.app` 注册 `dcauth://`,浏览器可直接唤起;内部是后台常驻进程 + 系统图形确认框,重复唤起会转发给已有进程,不会叠加实例。
|
||||
|
||||
## 构建
|
||||
|
||||
@@ -18,9 +18,10 @@ x86_64-w64-mingw32-windres --codepage=65001 versioninfo.rc \
|
||||
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 \
|
||||
go build -trimpath -ldflags "-H windowsgui -s -w" \
|
||||
-o dist/DCAuth.exe .
|
||||
cp dist/DCAuth.exe dist/DCAuth-2.0.0.exe
|
||||
```
|
||||
|
||||
版本号统一在 `main.go` 的 `clientVersion` 和 `versioninfo.rc` 中维护。`DCAuth.exe` 右键“属性 → 详细信息”会显示文件版本和产品版本,托盘菜单、设备信息及确认窗口也会显示当前版本。
|
||||
版本号统一在 `main.go` 的 `clientVersion` 和 `versioninfo.rc` 中维护。`DCAuth.exe` 右键“属性 → 详细信息”会显示文件版本 `2.0.0.0` 和产品版本 `2.0.0`,托盘菜单、设备信息及确认窗口也会显示当前版本。
|
||||
|
||||
Windows ARM64:
|
||||
|
||||
@@ -56,12 +57,38 @@ codesign --force --sign - dist/DCAuth-macos
|
||||
|
||||
托盘操作:
|
||||
|
||||
- 双击图标:查看设备码和机器码,并复制到剪贴板。
|
||||
- 双击图标:查看设备码并复制到剪贴板。
|
||||
- 右键菜单:查看设备码、退出 DCAuth。
|
||||
- 浏览器登录:只弹出一个确认窗口;点击“确定”后显示成功气泡,点击“取消”则拒绝。
|
||||
- 再次唤起协议:第二个进程会把请求转交给常驻进程,然后立即退出。
|
||||
|
||||
## macOS 开发调试
|
||||
## macOS 安装(一次性)
|
||||
|
||||
```bash
|
||||
cd apps/dcauth
|
||||
./build-macos.sh # 默认装到 ~/Applications/DCAuth.app
|
||||
```
|
||||
|
||||
脚本会做四件事:
|
||||
|
||||
1. 用 `go build` 产出当前架构的二进制(自动读取 `main.go` 的 `clientVersion`)。
|
||||
2. 用 `osacompile` 生成 AppleScript 壳,把 `dcauth://` 事件转成 argv 交给二进制。
|
||||
3. 向 LaunchServices 注册 `dcauth://` 协议,并做 ad-hoc 签名。
|
||||
4. 打印安装路径与退出方式。
|
||||
|
||||
装好之后浏览器登录页点一次即可直接唤起确认框,和 Windows 一样,**不再需要命令行**。
|
||||
|
||||
- 查看设备码:`open "$HOME/Applications/DCAuth.app"`
|
||||
- 停止后台进程:`"$HOME/Applications/DCAuth.app/Contents/Resources/dcauth" --exit`
|
||||
- 换成 Apple 芯片 / Intel 通用包:脚本在目标机器上各跑一次即可(二进制与架构绑定)。
|
||||
|
||||
> 为什么要套一层 AppleScript:macOS 只把自定义协议 URL 作为 Apple Event 投递,
|
||||
> 纯 Go 的命令行程序收不到(实测进程参数为空)。AppleScript applet 的
|
||||
> `on open location` 是目前不引入 Cocoa/cgo 的最稳做法。
|
||||
|
||||
## macOS 命令行方式(备用)
|
||||
|
||||
没有安装 `.app` 时,也可以直接执行二进制:
|
||||
|
||||
登录页在开发模式会显示一条 `dcauth://...` 链接。复制后在终端执行:
|
||||
|
||||
@@ -78,7 +105,7 @@ cd apps/dcauth
|
||||
./dist/DCAuth-macos --exit
|
||||
```
|
||||
|
||||
macOS 当前仍是开发版:私钥明文保存在用户配置目录的 `DCAuth/device.key`,且浏览器不会自动拉起程序,需要从登录页复制命令执行。
|
||||
macOS 当前仍是开发版:私钥明文保存在 `~/Library/Application Support/DCAuth/device.key`(没有 DPAPI 等系统级保护),不要把这一版当成生产级凭证。安装 `DCAuth.app` 后浏览器可以自动唤起,但密钥保护强度仍低于 Windows。
|
||||
|
||||
如果只是测后台业务,不想每次都走短信和设备验证,可以在“后台用户”里把测试账号设为 **技术测试**。该账号只使用账号密码登录;正式账号仍必须走短信 + DCAuth。
|
||||
|
||||
@@ -118,7 +145,7 @@ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -trimpath -ldflags "-H windowsg
|
||||
## 安全说明
|
||||
|
||||
- 私钥不离开本机,Windows 使用 DPAPI 保护。
|
||||
- 服务端只保存公钥和机器码哈希/脱敏值。
|
||||
- 机器码采集主板 UUID、MachineGuid、主板/BIOS/系统盘序列号、CPU ID,不上传原始序列号。
|
||||
- 服务端只保存设备公钥和设备码,不采集或保存硬件序列号。
|
||||
- 设备码只由公钥派生,不包含硬件指纹;更换硬件不会改变设备码。
|
||||
- 正式分发前建议使用代码签名证书,避免 SmartScreen 和杀毒软件误报。
|
||||
- 如果要做到 token 也不能复制,需要后续让 exe 对每次 API 请求签名,或把 exe 作为唯一客户端。
|
||||
|
||||
Reference in New Issue
Block a user