Skip to content

Wicket 是什么 ​

Wicket(模块路径 github.com/gonewx/wicket)是一个 OpenID Connect / OAuth 2.0 授权服务器库。它不是独立部署的认证服务,而是一组 http.Handler 中间件:你把它挂进自己的 Go 服务里,这个服务就能对外提供 /connect/token、/connect/authorize、/.well-known/openid-configuration 等标准协议端点。

go
// 宿主应用的 handler 链:wicket 处理协议端点,其余请求原样交给 app
handler := hosting.ScopeMiddleware(root)(srv.UseWicket()(app))
http.ListenAndServe(":5000", handler)

完整可运行的装配见 快速开始。

定位:嵌入式中间件 ​

Wicket 运行在你的进程里,和你的业务代码共享同一个 HTTP 监听、同一套部署流水线:

  • 协议由 wicket 负责:请求解析与校验、客户端认证、令牌签发与校验、发现文档、JWKS 发布。
  • 用户与页面由宿主负责:用户库、密码校验、登录页、同意页、错误页都由你的应用实现。wicket 只在需要用户交互时把浏览器重定向到你配置的 URL。
  • 基础设施由宿主注入:数据库、签名密钥、日志、清理调度都由宿主提供。wicket 主模块不依赖任何数据库驱动,也不在后台自起 goroutine。

能做什么 ​

能力说明
协议端点授权、授权回调、令牌、发现文档、JWKS、UserInfo、内省、结束会话(含回调)、会话检查 iframe、CIBA 后端通道认证
授权类型authorization_code(默认要求 PKCE)、client_credentials、refresh_token、urn:openid:params:grant-type:ciba、urn:ietf:params:oauth:grant-type:device_code(仅令牌端点,见下)、password(默认拒绝,需注入校验器)
令牌形态JWT 访问令牌(typ 为 at+jwt)、身份令牌、刷新令牌;引用令牌的模型与存储端口已定义,但 v0.1.4 签发路径尚未接通
外部登录内置 Google、Facebook 认证处理器;JWT Bearer 认证;运行时动态认证方案
无状态验签oidcverify(本地验证外部 OIDC 提供者签发的 ID Token)、wechatverify(微信服务端交换)、phoneverify(阿里云号码认证)三个独立包,不依赖任何存储
存储三族存储端口(storage / session / keymgmt)+ 契约测试套件;内存实现仅供开发;官方 PostgreSQL 适配器 github.com/gonewx/wicket-pg
签名密钥宿主手动提供签名凭据,或使用 keymgmt 包的自动轮换管理器

不做什么 ​

  • 不提供用户管理与登录 UI。 没有用户表、注册、找回密码、登录页模板。这些属于宿主应用。
  • 不内置交互式登录的 cookie 认证处理器。 用户登录后由宿主写入的认证 cookie(方案名 wicket),其 handler 需宿主通过 ServerConfig.SetAuthenticationHandlerProvider 提供,见 核心概念。
  • 不实现以下端点(v0.1.4):令牌吊销 /connect/revocation、设备授权 /connect/deviceauthorization、mTLS 端点。它们只有路径常量,没有注册处理器——请求会透传给宿主 handler。注意发现文档在默认配置下仍会公布 revocation_endpoint 与 device_authorization_endpoint,见 配置选项 的端点开关一节。
  • 不处理 CORS 响应头和反向代理头。 见 CORS 跨域 与 生产部署清单。
  • 不自起后台任务。 过期数据清理由宿主按自己的调度驱动。

适用场景 ​

适合:

  • 你已经有一个 Go 后端,希望由它自己向移动端、单页应用、第三方客户端或内部服务签发 OAuth 2.0 / OIDC 令牌,而不是再运维一个独立的认证服务。
  • 机器对机器调用(client_credentials),需要标准的访问令牌与内省端点。
  • 需要把“Apple / Google / 微信 / 手机号”等外部凭据换成你自己的本地身份——这部分可以只用无状态验签包,完全不装配授权服务器。

不太适合:

  • 需要开箱即用的管理后台、用户自助门户、多租户控制台。
  • 需要成熟的 SAML、WS-Federation 等其他协议。
  • 对“生产就绪”的要求高于一个 v0.1.x 早期版本能给的承诺(见下)。

与独立部署的认证服务对比 ​

维度嵌入 wicket独立部署的认证服务
部署与运维随宿主进程发布,无额外服务单独的服务、数据库、升级节奏
用户数据访问直接调用宿主的用户库与业务逻辑通过 API、同步或联邦方式对接
登录页定制完全由宿主实现,零限制受产品的主题/模板机制约束
开箱功能只有协议核心,周边需自建通常自带管理界面、用户管理、审计
故障隔离与宿主同进程,宿主故障即认证故障认证服务独立伸缩、独立故障域
安全责任密钥、存储、HTTPS、日志由宿主负责大部分由服务提供方承担

简单说:wicket 用“更多由你掌控”换取“更少的运维面”。如果你的团队愿意承担装配与运维责任,它能让认证能力与业务代码贴得最近。

当前状态 ​

  • 最新版本 v0.1.4,属于 早期版本。v0.x 期间 API 可能出现不兼容变更,请在 go.mod 中固定精确版本。
  • 需要 Go 1.27 工具链。
  • 根包的 Go 包名是 gois(与目录名不同),示例中统一用别名导入:wicket "github.com/gonewx/wicket"。
  • 部分能力仍有已知缺口,本文档会在对应页面明确标注,例如:
    • 自动密钥管理无法通过修改选项开启,需宿主自建管理器(见 签名密钥);
    • 客户端设为引用令牌仍签发 JWT(见 核心概念);
    • 容器内部日志器固定,ServerConfig.SetLogger 不影响已构造的服务(见 嵌入宿主应用);
    • 刷新令牌的过期与轮换策略尚未实现(见 刷新令牌);
    • 内置的默认数据保护实现不适用于生产(见 生产部署清单);
    • 微信、号码认证的真实凭据联调尚未完成。

相关阅读 ​

以 Apache License 2.0 发布 · 文档内容 © 2026 Wicket 作者