OAuth2/OIDC 应用接入
@uscncn 已确认这是让 bbs1org 成为 OAuth2/OIDC 身份提供者,和现有
oauth_login的第三方登录客户端是反方向。合格实现至少要有授权码 + PKCE、redirect URI/state/nonce/scope 校验、客户端密钥哈希、同意与撤销、签名密钥轮换与 JWKS、discovery/token/userinfo/revocation、令牌撤销、后台审计和限流。v8.5.23 普通插件 route 能做业务端点,但标准 well-known 路径、私钥托管和审计边界需要核心先确认。不会为了赶进度发布一个未经审计、只会签 JWT 的简化认证服务器。请先确定三点:是否允许标准 well-known 路由;私钥用文件、环境变量还是数据库托管;首期只支持 confidential web client,还是同时支持 public PKCE client。确定后作为独立安全项目实现并做互操作/攻击面测试。收到,三个边界已经锁定:允许标准
/.well-known/openid-configuration路由;签名私钥和客户端配置由数据库托管;同时支持 public client 的 Authorization Code + PKCE。我也重新核对了 v8.5.23:路径路由会把
/.well-known/openid-configuration交给名为.well-known的插件 route,插件可以再严格核对完整 URI,因此不需要修改核心入口。首版范围确定为:discovery、authorize、token、userinfo、JWKS、revocation;confidential client 使用哈希后的 secret,public client 强制 S256 PKCE;不做 implicit、password、client_credentials。该项按独立安全插件开发和测试,不与今天的 exact_post_time 紧急修复混发。已按确认的三个边界完成并发布:
oidc_provider1.0.0,市场 topic/372。已实现:
- 标准
/.well-known/openid-configurationdiscovery; - Authorization Code;
- public client 强制 S256 PKCE;
- confidential client 支持 Basic/Post secret,数据库只存密码哈希;
- RS256 ID Token、数据库托管私钥、JWKS 和后台密钥轮换;
- UserInfo;
- offline_access Refresh Token 单次轮换;
- token revocation,撤销 refresh 时关联 access token 一起失效;
- redirect URI 完整匹配,非 localhost 只允许 HTTPS;
- openid/profile/email/offline_access scope;
- 用户授权同意页和已授权复用;
- 后台客户端创建、停用、删除、secret 轮换及审计日志。
安全处理:授权码、access token、refresh token在数据库只保存 SHA-256 哈希;授权码 5 分钟且只能使用一次;public client 不接受 secret;secret 只显示一次,通过 120 秒一次性数据库记录交付,刷新页面不会重复创建客户端;私钥按你的要求存数据库,后台明确提示数据库备份属于敏感资产。
本地已跑通完整互操作流程:discovery → JWKS → 同意页 → 授权码 → PKCE 换 token → RS256 验签 → UserInfo → refresh 轮换 → 旧 refresh 重放拒绝 → revocation 后 access token 返回 invalid_token。
首版按之前约定不支持 implicit、password、client_credentials。安装后先在后台把 Issuer 设置为论坛的公开 HTTPS 地址,再创建客户端。
- 标准
