安全、隐私与接入说明
这里集中放置验证原理和 OAuth 2.1 接入细节,首页和验证页只保留完成任务所需的信息。
本服务只通过 B 站公开资料确认 MID、昵称、头像、签名、粉丝、等级、VIP 和账号状态,不要求输入 B 站密码,也不会获取或保存 Cookie、access token 或隐私接口响应。
验证时需要临时修改个人签名。原签名只在当前标签页的 sessionStorage 中保存,用于完成后的恢复提示。请在个人设备上使用,并在验证完成后恢复原签名。
- 在验证页面输入 B 站 MID,确认公开资料。
- 复制服务生成的临时签名指令,前往 B 站个人设置写入签名。
- 返回服务确认,服务端重新读取公开签名并完成注册、登录或绑定。
- 复制页面缓存的原签名,恢复 B 站设置。
如果 challenge 过期或签名不匹配,请重新查询并生成新的指令。challenge 不能重复消费。
授权服务提供 discovery、动态客户端注册、授权码、token、userinfo 和 OIDC metadata 端点。客户端必须使用 S256 PKCE,不支持隐式授权。
可申请的 scope 只有 openid、profile 和 bili:public。只有明确申请 `bili:public` 时,userinfo 才会返回当前绑定的公开 B 站 MID。
创建 Client 需要先登录本服务,请前往开发者设置填写应用名称、主页 URL 和 OAuth 回调 URL。
本地 HTTP 回调请选择 Native 类型,并使用http://localhost、http://127.0.0.1 或http://[::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