DOCUMENTATION

安全、隐私与接入说明

这里集中放置验证原理和 OAuth 2.1 接入细节,首页和验证页只保留完成任务所需的信息。

安全与隐私
验证不依赖 B 站登录态。

本服务只通过 B 站公开资料确认 MID、昵称、头像、签名、粉丝、等级、VIP 和账号状态,不要求输入 B 站密码,也不会获取或保存 Cookie、access token 或隐私接口响应。

验证时需要临时修改个人签名。原签名只在当前标签页的 sessionStorage 中保存,用于完成后的恢复提示。请在个人设备上使用,并在验证完成后恢复原签名。

验证流程
一次性 challenge 会绑定 MID 和有效期。
  1. 验证页面输入 B 站 MID,确认公开资料。
  2. 复制服务生成的临时签名指令,前往 B 站个人设置写入签名。
  3. 返回服务确认,服务端重新读取公开签名并完成注册、登录或绑定。
  4. 复制页面缓存的原签名,恢复 B 站设置。

如果 challenge 过期或签名不匹配,请重新查询并生成新的指令。challenge 不能重复消费。

OAuth 2.1 接入
仅支持 authorization code + S256 PKCE。

授权服务提供 discovery、动态客户端注册、授权码、token、userinfo 和 OIDC metadata 端点。客户端必须使用 S256 PKCE,不支持隐式授权。

可申请的 scope 只有 openidprofile bili:public。只有明确申请 `bili:public` 时,userinfo 才会返回当前绑定的公开 B 站 MID。

创建 Client 需要先登录本服务,请前往开发者设置填写应用名称、主页 URL 和 OAuth 回调 URL。

本地 HTTP 回调请选择 Native 类型,并使用http://localhosthttp://127.0.0.1http://[::1]。浏览器应用通常应选择 Public Client(认证方式none),授权码换 token 时提交 S256 PKCE 的code_verifier;线上 Web 类型则使用 HTTPS。

GET /.well-known/oauth-authorization-server
GET /.well-known/openid-configuration
GET /oauth2/authorize
POST /oauth2/token
GET /oauth2/userinfo
POST /oauth2/register
登录方式
登录页支持多种设备登录方式。

登录页支持 B 站签名登录和 Passkey 登录。B 站登录同时覆盖新用户注册、已有用户登录和已登录用户绑定。

已登录设备可以在账户面板生成一次性设备登录码,复制到其它设备的登录页使用。设备码过期或使用后不可再次使用。

浏览器插件能力
插件能力按声明逐项启用。

网站会通过 `window.postMessage` 与插件握手。插件返回名称、版本和能力列表后,网站才会显示对应功能。

bili.mid.read

向验证页提供当前 B 站 MID,用于自动预填。

bili.api.proxy

代理 B 站请求,优先覆盖当前账号读取、公开资料和签名验证;响应可能包含用户主动授权的登录态资料。

bili.direct-login

自动完成临时签名、验证和原签名恢复。

代理请求使用 bili.api.request,只接受 B 站 HTTPS 地址和 GET/POST 方法。签名写入使用 user_sign,CSRF 由插件在本地注入;快捷登录恢复使用可等待的direct-login.finish 请求,网站确认恢复成功后才会继续。

插件可以在本地使用自身的 B 站登录状态来完成请求转发或自动签名操作。网站不会接收插件的 Cookie、CSRF、access token、refresh token 或密码,但代理响应可能包含当前登录态允许读取的资料; 只有在信任插件和当前网站时才应启用该能力。握手必须回传网站提供的 nonce,请求使用 requestId,网站会校验来源、超时和响应字段。

bili-sign:hello
bili-sign:ready
bili-sign:request
bili-sign:response
bili-sign:event