统一登录 SSO
OIDC / OAuth 2.1 单点登录,BBS、XAdmin、门户共用一个账号,登录一次全线通行。
airdb.id · 统一身份平台
airdb.id 是 airdb 体系的用户身份中枢:OIDC / OAuth 2.1 单点登录, Passkey 多因素,零信任接入。实名核验坚持「核验即弃」—— 证件是用来核验的,不是用来收藏的。
平台建设中 · 现行入口 sso.airdb.dev · 国内环境 id.airdb.net
▲ 示例样本:我们保存的全部,就是这张卡上的东西。
平台能力
登录、账号、多因素、审计、实名、零信任——用户身份相关的事都归这里, 业务系统不再各自管用户。状态如实标注:没上线,就写规划中。
OIDC / OAuth 2.1 单点登录,BBS、XAdmin、门户共用一个账号,登录一次全线通行。
资料、第三方绑定、登录设备与历史,一处管理;授权过的应用随时一键撤销。
WebAuthn 无密码登录作为一等公民,TOTP 与短信兜底,密码只是过渡方案。
登录与授权事件全量留痕,只增不改;异地登录、异常行为主动告警。
对接权威数据源核验身份证与护照,只留「已核验」结果与哈希,不留任何影像。
内部系统统一挂身份感知代理,按角色与 MFA 等级放行,业务自身不再做登录。
核验即弃 · Verify & Discard
身份证、护照、工作证——这类敏感证件,对平台来说存下来就是负债。 泄露一次,用户没法像改密码一样换一张身份证。
所以 airdb.id 把实名做成一条通道而不是一个仓库: 证件只在核验那一刻经过我们,比对完成即丢弃,系统里留下的只有结果、哈希与时间。
业务系统则更简单:只能问「这个人是否已实名」,得到一个布尔值,永远拿不到证件数据——因为我们自己也没有。
注:依照《个人信息保护法》,证件信息属于敏感个人信息——单独同意、最小化使用、 国内数据境内留存。「核验即弃」是把合规写进架构,而不是写进承诺。
证件信息仅在这一次核验请求中使用,全程加密传输,不落任何中间存储。
对接公安三要素等权威数据源实时比对,我们做通道,不做证件的抄写员。
比对完成即丢弃原始数据,只写下三样东西:结果、哈希、时间。
开发者接入
任何支持 OpenID Connect 的语言和框架都能直接接入, 三个端点走完标准授权码流程,不需要学习私有协议。
$ curl https://airdb.id/.well-known/openid-configuration { "issuer": "https://airdb.id", "authorization_endpoint": "https://airdb.id/oauth/authorize", "token_endpoint": "https://airdb.id/oauth/token", "jwks_uri": "https://airdb.id/oauth/jwks", "scopes_supported": ["openid", "profile", "email"], "code_challenge_methods_supported": ["S256"] }
GET /oauth/authorize ?client_id=bbs-airdb-net &response_type=code &scope=openid profile &redirect_uri=https://bbs.airdb.net/auth/callback &code_challenge=E9Melhoa…OT41gw # PKCE · S256,强制 &state=af0ifjsldkj 302 → https://bbs.airdb.net/auth/callback?code=…&state=…
POST /oauth/token grant_type=authorization_code code=SplxlOBeZQQYbYS6WxSbIA code_verifier=dBjftJeZ4CVP… { "access_token": "eyJhbG…", # JWT · 短时效 "refresh_token": "v1.MjAy…", # 旋转 · 一次一换 "id_token": "eyJhbG…" }
路线图
每一期都是可独立交付的能力:先把 SSO 落地,再做加固,然后才轮到实名与零信任。
OIDC IdP 上线,BBS 与 XAdmin 首批接入,账号中心提供资料与密码管理。
建设中Passkey / TOTP 多因素,登录历史与全量审计,管理后台与应用注册。
规划中核验即弃的实名核验上线;业务方只能查询「是否已实名」,拿不到证件数据。
规划中身份感知代理覆盖内部系统,SCIM 用户同步与细粒度授权。
规划中环境与接入方
.id 与 .dev 一样无法 ICP 备案,所以国内、海外各一套,账号互通; 国内用户的敏感数据只落国内节点。
国内环境,国内用户数据只落国内节点,敏感数据不跨境同步。
海外环境,与国内系统一一对应;.id 域名无法 ICP 备案,仅部署海外节点。
常见问题
关于核验即弃、数据去向和接入方式。没找到答案的问题,去 GitHub 提 issue, 答完会补充到这里。
只有三样:已实名的布尔结果与核验等级、证件号的单向哈希(仅用于查重,无法还原)、核验时间与审计流水。证件影像、明文证件号、活体检测的原始帧,在比对完成的那一刻即时丢弃,不落任何存储。
不能。业务方只能调用实名查询接口,得到「是否已实名」与核验等级两个字段。这不是权限问题,而是架构问题——证件数据我们自己也没有留存,想给也给不出来。
账号一一对应、全线互通:国内走 id.airdb.net(已备案),海外走 airdb.id。依照《个人信息保护法》,国内用户的敏感数据只落国内节点,不做跨境同步。
登录这件事做一次就够了。密码策略、Passkey、风控、审计,集中在一处建设和修补,比散落在每个系统里各修各的可靠得多;业务系统只做业务,暴露的攻击面也更小。
SSO 正在建设中(P0 阶段)。接入走标准 OIDC:先在 GitHub 提 issue 登记排期,IdP 上线后把 discovery 地址指向 airdb.id 即可,业务逻辑无需改造。