常见问题
wicket 是一个独立运行的认证服务吗?
不是。wicket 是一个 Go 库,以 func(http.Handler) http.Handler 中间件的形式嵌入你自己的 HTTP 服务。它不提供可执行文件、管理后台或登录界面——登录页、同意页、用户库都由宿主应用实现,wicket 负责协议本身。详见 Wicket 是什么。
现在可以用于生产吗?
wicket 处于 0.x 阶段:公开 API 仍可能调整,部分协议能力尚未完整落地(例如设备授权端点、刷新令牌的过期与轮换策略)。核心的授权码、客户端凭据、刷新令牌、发现、内省等路径有集成测试与端到端测试覆盖。上线前请逐条核对生产部署清单,并锁定具体版本号。
需要什么 Go 版本?
Go 1.27 或更高。go.mod 声明了 go 1.27,更低版本的工具链无法解析该模块。
必须使用数据库吗?
取决于你用哪部分能力:
- 只做外部凭据验签(
oidcverify/wechatverify/phoneverify):完全不需要存储,也不需要组合根。 - 作为授权服务器对外签发令牌:需要持久化存储。内存实现只适合本地开发——进程重启会丢失所有授权码、刷新令牌和会话,多副本部署时请求还会随机失败。见持久化存储。
支持哪些数据库?
官方提供 PostgreSQL 适配器 github.com/gonewx/wicket-pg。其他介质可以按编写存储适配器自行实现,并用 wicket 自带的契约测试套件验证行为一致。
支持资源所有者密码授权(password)吗?
默认不支持,请求会被拒绝。该授权方式已不被现行安全最佳实践推荐;如确有遗留系统需要,可以通过 ServerConfig 注入自己的 ResourceOwnerPasswordValidator 开启。
为什么 wicket 不自己定时清理过期数据?
库不应在宿主不知情的情况下启动后台 goroutine。wicket 把清理入口暴露给宿主,由你按自己的调度、超时和日志策略驱动;过期判定始终在核心侧完成,清理只负责回收空间,不影响正确性。
发现文档里列出了 /connect/revocation,为什么调用没有效果?
v0.1.4 的发现文档会列出撤销、设备授权等端点的 URL,但这些端点尚未注册处理器,请求会直接落到宿主应用。已注册端点以协议端点页为准。
如何报告问题或参与贡献?
请在 GitHub 仓库 提交 issue 或 pull request。涉及安全漏洞的问题请不要在公开 issue 中披露细节,先私下联系维护者。