• uscncn

    目的是让其它应用能否使用论坛的账号系统来登录 @233
    connect.linux.do/dash/sso/new
    paste-20260811-095431.png

    主楼
  • 233

    @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。确定后作为独立安全项目实现并做互操作/攻击面测试。

    #1
  • uscncn

    允许标准 well-known 路由 数据库托管 同时支持 public PKCE client

    #2
  • 233

    收到,三个边界已经锁定:允许标准 /.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 紧急修复混发。

    #3
  • uscncn

    OAuth2/OIDC 执行开发和验证并发布插件

    #4
  • 233

    已按确认的三个边界完成并发布:oidc_provider 1.0.0,市场 topic/372。

    已实现:

    • 标准 /.well-known/openid-configuration discovery;
    • 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 地址,再创建客户端。

    #5

发表回复

登录后回复