v0.1.4 · Go 1.27 · Apache-2.0

把授权服务器
嵌进你的 Go 服务

Wicket 以一个 http.Handler 中间件交付完整的 OpenID Connect 与 OAuth 2.0 协议端点。 登录页、用户库、部署方式都由你决定——它只负责把协议做对。

go get github.com/gonewx/wicket@v0.1.4
main.go
// 1. 组合根:装配全部协议服务
root, err := di.NewRoot()
if err != nil { log.Fatal(err) }
defer root.Close()

// 2. 注入客户端、资源、签名密钥与存储
cfg := root.ServerConfig()
cfg.SetClients(clients)
cfg.SetApiScopes(scopes)
cfg.SetRefreshTokenStore(store.NewRefreshTokenStore(pool, logger))
cfg.Freeze() // 漏注入的存储在此直接报错

// 3. 挂到你现有的路由前面
srv, _ := server.DefaultServer(root)
http.ListenAndServe(":443",
    hosting.ScopeMiddleware(root)(srv.UseWicket()(app)))

它在请求链路里的位置

协议路径由 Wicket 处理,其余请求一字不改地交给你的应用。没有旁路服务,没有跨进程调用。

  1. 客户端 浏览器 · 移动应用 · 后台服务
  2. 你的 Go 进程 Wicket 中间件/connect/* · /.well-known/* 你的 handler登录页 · 同意页 · 业务 API
  3. 你的存储 PostgreSQL 适配器 · 自研适配器

协议能力

按标准实现,按需开启。每项能力都对应一组可以直接读的源码与测试。

授权码 + PKCE

为 Web、移动端与单页应用签发令牌。登录与同意交互回到你自己的页面完成。

阅读流程 →

客户端凭据

服务对服务调用的最短路径:一个客户端、一个作用域、一次请求。

阅读流程 →

刷新令牌

通过 offline_access 获得长期访问,由带版本号的刷新令牌存储承载。

阅读流程 →

CIBA 后端通道认证

由服务端发起、在用户自己的设备上确认的认证,适合客服与柜台场景。

阅读流程 →

发现、JWKS 与内省

标准的 .well-known 元数据、公钥集合与令牌内省端点,资源服务开箱可接。

端点一览 →

会话与登出

登出端点与登出后重定向,以及可替换的服务端会话存储。

阅读流程 →

外部身份提供者

Google、Facebook 登录与 JWT Bearer 认证,通过可插拔的方案处理器接入。

身份接入 →

签名密钥生命周期

keymgmt 包按候选、生效、保留、退役四个阶段轮换密钥,旧令牌在轮换期间依然可以验签。

签名密钥 →

存储是端口,不是绑定

Wicket 主模块不依赖任何数据库驱动。存储被拆成三族接口,由你选择实现。

  • 官方 PostgreSQL 适配器:github.com/gonewx/wicket-pg,自带迁移。
  • 契约测试套件:storagetest、sessiontest、keymgmttest,适配器跑通即可声明版本兼容。
  • 语义写进契约:「不存在」与「故障」可区分,写入默认只插入不覆盖,并发更新携带版本号。
持久化存储指南
storage 授权码 · 刷新令牌 · 引用令牌 · 用户同意 · 设备码 · CIBA 请求
session 服务端会话,按主体批量吊销
keymgmt 签名密钥记录与轮换状态,乐观并发

默认值站在生产这一边

漏装配即失败

任何存储未注入、又没有显式声明内存回退时,启动阶段直接报错,而不是在多副本环境里随机丢令牌。

不起后台任务

过期数据的清理入口交给宿主调度。何时跑、跑多久、怎么记日志,都在你的掌控之中。

过期判定在核心侧

统一使用注入的时钟判断过期,不依赖数据库时间,避免集群内时钟漂移带来的分歧。

只想验证登录凭据?
不用装配服务器。

三个独立包,不依赖存储、不依赖组合根,单独引入即可。

本地验签与服务端交换
oidcverify
用公钥集合在本地校验 Apple、Google 或自定义提供者签发的 ID Token。
wechatverify
在服务端用微信移动应用的授权码换取 unionid / openid。
phoneverify
在服务端用阿里云号码认证令牌换取手机号,用于一键登录。

当前状态

Wicket 处于 0.x 阶段:核心授权路径有集成测试与端到端测试覆盖,公开 API 仍可能调整。 部分能力尚未完整落地,包括设备授权与撤销端点、刷新令牌的有效期策略、前/后通道登出;微信与号码认证尚未完成真实凭据联调。 我们在文档里如实标注每项能力的状态。

十分钟跑起第一个令牌