3.3 KiB
3.3 KiB
使用 LINUX DO Connect 登录:OAuth 2.0 接入指南(Golang)
LINUX DO Connect 提供标准 OAuth2 式授权与用户接口,官方入口为 connect.linux.do。本文说明其端点形态、在 Connect 中登记回调及 Go 侧接入方式,与任意自建应用兼容(不限定具体产品名)。
以 Connect 当前文档与控制台为准;若端点有变更,请以官网「应用接入」说明为准。
1. 协议与端点
对 Connect 根地址 BASE(无尾斜杠,常见为 https://connect.linux.do):
| 步骤 | 典型 URL |
|---|---|
| 授权 | {BASE}/oauth2/authorize |
| 换 token | {BASE}/oauth2/token |
| 当前用户 | {BASE}/api/user(Authorization: Bearer {access_token},Accept: JSON) |
Scope 以 Connect 应用接入要求为准,常见为读取用户信息类 scope(例如文档中的 read:user 等,以实际申请为准)。
2. 在 Connect 注册应用
- 登录 connect.linux.do,在 应用接入 中创建应用。
- 回调地址 填写你服务的真实
redirect_uri(与下文 Go 中RedirectURL一致)。 - 记录 Client ID、Client Secret。
3. Golang:Endpoint 配置
import "golang.org/x/oauth2"
func linuxDoEndpoint(base string) oauth2.Endpoint {
// 去掉 base 尾斜杠
for len(base) > 0 && base[len(base)-1] == '/' {
base = base[:len(base)-1]
}
return oauth2.Endpoint{
AuthURL: base + "/oauth2/authorize",
TokenURL: base + "/oauth2/token",
}
}
oauth2.Config 示例:
RedirectURL:与 Connect 中登记的回调完全一致Scopes:与创建应用时一致- 回调里:
cfg.Exchange(ctx, code)换access_token
4. 拉取用户资料
成功换 token 后,请求:
GET {BASE}/api/user- Header:
Authorization: Bearer {access_token}
响应为 JSON。常见字段含用户 id、用户名、邮箱、头像等;建议用返回的稳定 id 作为账号主键(不要假设字段名永久不变,对接时以你抓包/文档为准)。
5. 网络与排障
- 换 token、访问
/api/user由你的服务器发出;若机器无法访问connect.linux.do(代理、墙、内网限制),会表现为超时或token exchange失败。 - 浏览器能打开 Connect 授权页,不代表后端能连上
tokenURL;请在部署环境上测试出站 HTTPS。
6. 与 GitHub 示例同构的整合方式
实现步骤与 github.md 相同:根路径生成 state 并重定向到 AuthCodeURL;oauth2/authorize 的回调路径上取 code,Exchange 后带 Bearer 调 /api/user。仅替换:
oauth2.Config.Endpoint为linuxDoEndpoint(os.Getenv("LINUXDO_BASE"))- 用户 JSON 的解析按 Connect 实际返回字段编写
struct或map。
7. 安全建议
- 校验
state;Client Secret驻留服务端。 - 对 Connect 用户 id 与本地用户做一对一绑定,并处理“该 id 已绑其他用户”的冲突。