一个连接器,点亮所有登录
CZL Connect 把 GitHub、Google、QQ、微信、Discourse、通行密钥折叠成一套标准 OIDC 登录;登录之后的账号安全、用户分组、群发通知、App 推送、安装包分发与在线客服,也在同一个后台里完成。
登录之外, 还有一整套应用后台
接入一次 OIDC, 下面这些能力都跟着用户账号一起可用
聚合登录
GitHub / Google / QQ / 微信 / Discourse 汇成一套账号, 对外标准 OAuth2 + OIDC
账号安全
通行密钥、登录历史与 IP 风险、邮箱验证与换绑
应用管理与开放 API
分组权限、应用统计、日志审计, 以及给你后端调用的应用级 API
邮件与发布下载
群发通知、验证码与自定义邮件; GitHub Release 固定地址分发与自动更新清单
App 推送
Web Push 与应用后端的消息转成 iOS 系统通知, 内容端到端加密
在线客服
网站浮窗、已校验访客、企业微信双向回复、跨应用收件箱
访客统计
一行脚本统计网站访客、来源、页面与设备, 不用 Cookie
一次接入, 接住所有登录方式
同一个人从 GitHub、Google、QQ、微信、Discourse 或通行密钥进来, 都是同一个账号。对外只有一套标准 OAuth2 / OIDC, 现成的客户端库直接可用。
- Authorization Code + PKCE, 纯前端等公开客户端免 secret、强制 S256
- OIDC Discovery 与 JWKS, ID Token 用 RS256 签名
- prompt=none 静默认证, 已登录用户回到应用无感恢复会话
- upstream_providers 限定本次只显示指定的登录方式
- refresh_token 滑动续期, 活跃用户不会隔天掉登录
GET /oauth2/authorize?
client_id=client_xxxxxxxxxxxx
&response_type=code
&scope=openid profile email
&code_challenge_method=S256
&upstream_providers=github,wechat
&prompt=none
# 已登录且已授权 → 直接带 code 回跳
302 https://your-app.com/callback?code=…&state=…
# 无法静默完成 → 带错误回跳, 不弹登录页
302 https://your-app.com/callback?error=login_required登录之后, 账号也替你守着
用户在账户设置里自助管理登录方式与安全信息, 敏感操作有通行密钥兜底, 异常登录一眼能看出来。
- 通行密钥 (WebAuthn) 快捷登录, 敏感操作要求再次验证
- 登录历史按 IP 记录地理位置与风险: Tor、代理 / VPN、托管机房
- QQ / 微信登录先补真实邮箱并验证, 不留虚拟邮箱账号
- 已验证用户可自助换绑邮箱, 新旧邮箱各验证一次
- 管理员可按单 IP 或网段封禁, 支持到期自动解除
- 安全203.0.113.24上海 · 电信 · 微信
- 可疑198.51.100.7新加坡 · 托管机房 · GitHub
- 高风险192.0.2.180德国 · Tor 出口 · 通行密钥
用户、分组、数据, 后台和接口都能管
每个应用独立管理自己的用户与分组。控制台能做的, 大部分也能让你的后端用应用级 API 程序化完成。
- 应用内分组 t0–t5 / viewer / admin, groups 以 JSON 数组随 ID Token 与 userinfo 下发
- 应用统计: 授权次数、活跃用户、MAU 趋势
- 应用级 API: 查用户、改分组、禁用并踢下线、拉取授权事件
- 凭证按 scope 授权、哈希存储, 轮换时旧凭证保留 24 小时宽限
- 授权日志与操作审计分两条线记录, 保留时长随套餐提升
# 调整用户分组 (scope: group:write)
curl -X PATCH \
-H "Authorization: Bearer czlc_live_xxx" \
-d '{"group":"t3"}' \
https://connect.czl.net/api/v1/app/users/1001
# 用户下次登录, ID Token / userinfo 里:
{
"sub": "1001",
"email_verified": true,
"groups": ["t0", "t1", "t2", "t3"]
}通知用户、分发安装包, 不用另起服务
两件接入方常常要自己搭的运营活儿, 直接用应用里的数据完成。
- 群发通知: Markdown 正文, 按应用内分组筛选收件人, 也可追加外部邮箱
- 邮件 API: 向任意邮箱发验证码并由 CZL Connect 校验, 给应用用户发 HTML 自定义邮件
- 一键退订 (RFC 8058), 自动跳过已退订、未验证邮箱与封禁用户
- 发布下载: GitHub Release (含私有仓库) 经 /dl/ 固定地址对外分发
- latest.json 自动更新清单, 附件地址指向固定版本并带 sha256
- 公开下载页按访客系统推荐安装包, 按别名统计下载次数
{
"tag": "v1.2.3",
"aliases": {
"windows-x64": {
"sha256": "9f2c1a…",
"url": ".../dl/myapp/v1.2.3/windows-x64"
}
}
}给 iOS App 发通知, 不用自建推送服务
只会发 Web Push 的服务端 (如邮件服务器的 JMAP 推送) 和你自己的后端, 都能经 CZL Connect 推到用户的 iOS 设备。内容端到端加密, 中间只经手密文。
- Web Push (RFC 8030) 收件转发到 APNs, 每台设备一个固定推送地址
- RFC 8291 端到端加密, App 的通知扩展在设备上解密后显示
- 应用级 API 按用户推送: 绑定设备、列出设备、批量发送并逐条返回结果
- 一份 Apple 推送密钥 (.p8) 账户内多个 App 共用, 保存前实测连通
- 待启用期间暂存消息, 支持 JMAP 等服务端的订阅验证; 失效设备自动清理
{ "messages": [
{ "subscriptionId": "sub_a1…", "payload": "<密文>" },
{ "subscriptionId": "sub_b7…", "payload": "<密文>" }
] }
# 逐条返回结果
[ { "subscriptionId": "sub_a1…", "status": "sent" },
{ "subscriptionId": "sub_b7…", "status": "gone" } ]网站客服, 一行脚本上线
在你的网站嵌入客服浮窗, 访客消息实时进入收件箱。绑定企业微信智能机器人后, 坐席在企业微信里引用消息就能回复。
- 右下角浮窗, 或用 data-czl-support 绑到页面上任意按钮
- 会话前表单: 名称、邮箱、手机号、留言, 每项可选填或必填
- 已校验访客: 你的后端签发身份令牌, 资料锁定、跨设备共享记录
- 对话中收发图片与文件; 访客离线时回复改走邮件送达
- 企业微信智能机器人双向转发, 所有应用的会话汇总到一个收件箱
网站来了多少人, 从哪来, 看了什么
在网站嵌入一行脚本, 访客数据就进入应用控制台。不使用 Cookie、不存访客 IP, 无需弹 Cookie 同意提示。
- 访客、访问次数、浏览量、跳出率、平均访问时长, 与上一周期对比
- 页面 / 入口页 / 出口页, 来源域名与渠道 (搜索、社交、外链、广告)
- 浏览器、系统、设备, 国家与城市分布地图, 周 × 小时时段热力图
- 单页应用路由自动统计, 支持自定义事件与 UTM 推广活动
- 可公开的计数徽章: 日访客、月访客、累计访客、单页浏览量, 贴进 README 即用
- /1,284
- /pricing642
- /docs/start389
三个请求, 你的应用就有了身份系统
标准 Authorization Code + PKCE, 一份 client_id 通吃所有登录方式
创建应用
在控制台创建应用,填好回调地址和需要的 scope,当场拿到一组凭据
client_id = client_xxxxxxxxxxxx
client_secret = **** # 纯前端应用可不用
redirect_uri = https://your-app.com/callback前端跳授权
把用户引导到授权端点,走标准 Authorization Code + PKCE;想限定登录方式就带上 upstream_providers
GET /oauth2/authorize?
client_id=client_xxxxxxxxxxxx
&redirect_uri=https://your-app.com/callback
&response_type=code
&code_challenge_method=S256
&code_challenge=...换 token 取用户
拿 code 换 access_token / id_token,再调 userinfo 拿到用户身份;需要分级时再取可选的 groups
POST /api/oauth2/token
→ { access_token, id_token, refresh_token }
GET /api/oidc/userinfo
→ { sub, email, email_verified,
groups: ["t3"] } # 可选, 用不上可忽略当前可用的登录方式
用户用熟悉的账号登录; 新增登录方式时, 已接入的应用无需改动