fosite 初始化必须填满Config和Storage,否则直接运行会404或panic;需明确签名密钥(GlobalSecret非空)与存储实现,且/oauth2/auth和/oauth2/token路径、请求方法、Content-Type及client注册等均须严格匹配。
直接跑起来却 404 或 panic?大概率是 Config 或 Storage 没初始化到位。fosite 不是“启动就跑”,它要求你明确回答两个问题:用什么签名、数据存哪。
GlobalSecret 字段不能为空,哪怕测试也得传至少 32 字节随机字节——[]byte("my super secret signing password") 是示例,别真写死AccessTokenLifespan 建议显式设为 time.Minute * 30,默认 1 小时容易和前端预期不一致,调试 token 过期时会卡住storage.NewExampleStore() 只能本地调试,重启即丢 client/code/token;生产必须实现 fosite.Storage 接口,对接 MySQL/PostgreSQLfosite 内部硬编码匹配路径,不是“能访问就行”。注册错路径或加前缀(比如 /api/oauth2/auth),请求直接被拒,且日志几乎不报原因。
/oauth2/auth 必须处理 GET 请求,不能写成 /auth 或 /oauth2/authorize
/oauth2/token 必须处理 POST 请求,且要求 Content-Type: application/x-www-form-urlencoded;用 fetch 发 JSON 会卡在解析阶段,返回空响应体 + 400r.URL.Path == "/oauth2/auth" 不成立就 panicfosite 不读配置文件、不认环境变量。所有 client 信息都得走 Storage 接口写入,否则 auth 流程里查不到 client,直接 400。
redirect_uris 是 []string 类型,必须带协议和完整路径,例如 []string{"http://127.0.0.1:8080/callback"};少个 http:// 或结尾缺斜杠,授权页跳转后就会失败response_types 至少包含 "code",PKCE 相关字段(如 token_endpoint_auth_method)也要按需设,否则某些客户端校验通不过storage.CreateClient(&fosite.DefaultClient{}) 插入,但记得给 ID、Secret、RedirectURIs 赋值,空值会导致 silent fail别手动拼接 URL 后缀,比如 url + "?hd=example.com"——这会污染 state、破坏平台对 redirect_uri 的精确匹配(协议/域名/端口/路径全要一致),Google、GitHub 都会拒绝。
立即学习“go语言免费学习笔记(深入)”;
conf.AuthCodeURL("abc123", oauth2.SetAuthURLParam("hd", "example.com"))
https://yoursite.com/callback?code=xxx&state=yyy&hd=example.com
state 必须生成→存 session →比对三步闭环,用 crypto/rand.Read 生成 32 字节再 base64 编码,别放内存 map 或 query string实际部署时最容易忽略的是 storage 实现的并发安全性和 GlobalSecret 的轮换机制——这两点不处理,上线后要么 token 签名失效,要么高并发下 client 数据错乱。