新增两个插件,版本 1.0.0,分类:三方集成,min_core 1.1.2,已签名,可直接在插件市场安装。
| 插件 | 一句话说明 |
|---|---|
OIDC 身份提供方 oidc_provider |
把 FlintHub 变成 IdP,让 Discourse / Ghost / WordPress 等外部程序用你的论坛账号登录 |
OIDC 单点登录 oidc_client |
让 FlintHub 反过来对接 GitHub / Google / 另一个 FlintHub 站,用外部身份一键登录本站 |
两个插件互相独立,可单独安装,也可一起装来做互测。
一、OIDC 身份提供方(oidc_provider)
功能
- 标准 OIDC 协议:提供发现文档、授权、令牌、用户信息、公钥集(JWKS)、令牌撤销六个标准端点
- 授权码模式 + PKCE:公开客户端强制 S256,机密客户端可选校验
- RS256 签名:
id_token用 RSA 私钥签名,外部程序通过 JWKS 公钥验证 - 刷新令牌安全:强制轮换,每次使用签发新令牌;旧令牌被重复使用即判定泄露,自动撤销整个会话
- 同意页 + 记忆同意:用户首次授权展示完整 scope 清单;同意过的再次授权不再打断,scope 扩张时重新弹确认
- 客户端管理:区分机密/公开类型,回调地址逐字符精确匹配(防开放重定向),密钥只以哈希入库、仅显示一次,支持重置密钥与启用/停用
- 签名密钥管理:一键生成、轮换(旧公钥暂留 JWKS 待对方刷新)、撤销
- 审计:授权记录保留 90 天(IP 仅存哈希),可查看进行中的会话并一键撤销
怎么用(你站作为 IdP)
- 后台启用插件 → 进「OIDC 身份提供方」
- 先生成签名密钥(不发密钥就无法签发
id_token) - 「客户端」→ 新建客户端:填名称、类型、回调地址(每行一条,需与对方程序完全一致)、允许申请的 scope
- 保存后立即复制
client_id与密钥(密钥只显示这一次,离开页面无法再查) - 把「对接地址」里的发现文档地址给外部程序作者
- 对方配置完成后即可登录;之后可在「授权记录」查看明细、「进行中的会话」强制下线
二、OIDC 单点登录(oidc_client)
功能
- 对接任意外部 OIDC 身份源:GitHub、Google,或另一个 FlintHub 站
- 登录页入口:启用后登录页自动出现「使用统一身份登录」按钮
- 手动绑定策略(安全优先):外部身份首次验证通过后,必须由用户登录/注册本站账号确认关联,不自动建号、不按邮箱自动关联,从根上杜绝伪造邮箱冒领账号
- 绑定管理:用户可查看并解除已关联的外部身份;若账号未设置本地密码且这是唯一登录方式,会阻止解绑,避免把自己锁在门外
- 连通性自检:一键检测能否读取发现文档、issuer 是否一致、公钥集是否可读
- 对接信息:直接给出本站回调地址与发现文档地址,一键复制
- 死循环防护:若身份源地址指向本站自身,登录页不显示入口(避免「必须登录才能登录」),可手动访问
/oidc-login互测
怎么用(你站用别人登录)
- 到外部身份源那边注册应用,拿到 issuer / client_id / client_secret
- 回调地址填本站的
/oidc-login/callback(在插件后台「对接信息」里可一键复制,原样填入对方的回调白名单) - 后台启用插件 → 填写 issuer(必须
https://开头,不带结尾斜杠)、client_id、client_secret、申请的 scope(openid必选) - 点「连通性自检」确认通过
- 前台登录页出现统一身份入口,用户授权后若为全新身份,会被引导登录/注册本站账号完成绑定
公开客户端(无密钥)可留空 client_secret;已有密钥时留空表示不修改,勾选「清除」才会删掉。
三、两个插件一起装(自家互测)
- 用
oidc_provider给自己站建一个客户端,回调地址填本站的/oidc-login/callback oidc_client的 issuer 填本站地址(如https://www.flinthub.top)- 保存后登录页不会显示入口(这是防死循环的正常行为),直接访问
/oidc-login即可发起测试
四、注意事项
- 必须使用 https 公网域名;issuer 要与站点地址逐字节一致,
www与非www不能混用,否则外部程序全部校验失败 - 生成签名密钥需要服务器启用 PHP openssl 扩展
- 外部程序拉取发现文档时,服务器要能通过公网域名访问自身
- 插件私钥保存在插件数据目录,已由 Web 层双重拦截,不会进入任何安装包;请定期备份并严格控制服务器文件权限