我之前写过一篇文章叫为什么 Passkey 还没统治世界,写完后越想越气,于是写了 Passkey Dictator 这个扩展,目前正在 Firefox 商店审核,审核通过后可以直接在商店安装,如果你想现在就用,可以尝试这个安装方法
介绍
Passkey Dictator 是一个 Firefox 扩展,专门处理那些对 “你的 Passkey 必须存在哪里” 管得过宽的网站
有些网站会把平台认证器(platform authenticator)当成使用 Passkey 的唯一正确方式。结果就是,明明 YubiKey 这类 roaming / cross-platform FIDO2 认证器支持可发现凭证(discoverable credential)和用户验证(user verification),网站却在浏览器真正尝试认证之前就把它排除掉
Passkey Dictator 会移除这类人为门槛,让 Firefox 有机会调用你真正想用的认证器
它会做什么
除明确排除的网站外,Passkey Dictator 会对 WebAuthn 做两项有针对性的修改
1. 删除
authenticatorAttachment当网站创建 Passkey 时写了:
authenticatorSelection: { authenticatorAttachment: "platform"; }Passkey Dictator 会在请求到达 Firefox 前,只删除
authenticatorAttachment这一项其他 WebAuthn 要求完全保留
2. 覆盖平台认证器可用性检测
对于:
PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable();网站会收到:
true;对于:
PublicKeyCredential.getClientCapabilities();Passkey Dictator 会保留 Firefox 返回的其他所有真实能力,只把下面两个字段强制设为
true:{ userVerifyingPlatformAuthenticator: true, passkeyPlatformAuthenticator: true }其他字段原样保留
这样可以阻止某些网站把 “当前没有内建 platform authenticator” 当成“这个浏览器完全不能使用 Passkey”
排除的网站
Passkey Dictator 不会运行在:
google.com及其子域名github.com及其子域名
这是故意的
Google 和 GitHub 的认证流程确实会有意识地区分 platform authenticator 与 cross-device / roaming security-key 流程或对此有特殊提示。在这两个网站上,这种区分属于产品设计的一部分
因此 Google 和 GitHub 被明确排除
为什么?因为 Passkey Dictator 的目标是修复网站的 BUG,不是把所有 WebAuthn 产品设计强行改成一种模式
点名批判
请各位开发者们不要向他们学习
Telegram Web
Telegram Web 的 Passkey 创建写了:
authenticatorSelection: { authenticatorAttachment: "platform"; }这个硬编码的
platform会让 Firefox 在创建阶段直接排除 YubiKey,Linux 上没有平台验证器,所以会直接爆炸但是他们明明支持 Yubikey,甚至连图标都兼容好了
安装 Passkey Dictator 后,Yubikey 可正常使用
然后他们还设置了
attestation: "none",导致在浏览器上创建的通行密钥名称为空,我们不修这个,能跑就行Pixiv
Pixiv 的前端使用平台认证器能力检测来控制整个 Passkey UI
在 Linux + YubiKey 环境中:
- Firefox WebAuthn
- YubiKey FIDO2
- YubiKey discoverable passkey
- YubiKey user verification
- UVPAA
于是 Pixiv 直接显示 “该设备或浏览器无法使用通行密钥”,甚至不给 Firefox 尝试 YubiKey 的机会
安装 Passkey Dictator 后,Yubikey 可正常使用
为什么会有这个扩展
硬件安全密钥是合格的 FIDO2 / Passkey 认证器
但在 WebAuthn 分类中属于 cross-platform authenticator,而不是 platform authenticator
问题出现在一些网站把:
authenticatorAttachment: "platform";或:
isUserVerifyingPlatformAuthenticatorAvailable();直接理解成:Passkey 到底支不支持?
这两个问题本来就不是一回事
Passkey Dictator 的原则很简单:具体用哪一个认证器应该由用户选择
但是,如果确实有意识地提供不同的 platform 与 cross-device/security-key 流程,那就不强行抹平这种区分
控制台日志
Passkey Dictator 修改网站行为时,会在页面控制台留下日志
例如:
[Passkey Dictator] Forced isUserVerifyingPlatformAuthenticatorAvailable(): false -> true. Stop gatekeeping WebAuthn.[Passkey Dictator] Patched client capabilities: ...[Passkey Dictator] Nuked authenticatorAttachment="platform" on example.com. My key, my rules.在被排除的网站上,运行时保险逻辑可能输出:
[Passkey Dictator] Disabled on github.com: intentional platform/cross-device authenticator semantics are preserved.隐私
Passkey Dictator 不发送、不收集、不保存任何数据
它没有服务器、账号系统、统计分析或遥测
它只在本地页面里修改相关 WebAuthn JavaScript API
风险提示
这个扩展的目的就是主动覆盖认证器策略,并伪造两个与 platform Passkey 有关的能力信号
大多数时候,这正是你安装它的理由
但确实存在网站真正依赖特定认证器类型,或者在看到 platform capability 后切换到某条平台专用代码路径的情况。遇到这种网站,流程仍可能失败或产生奇怪行为
如果某个网站开着 Passkey Dictator 后突然开始表演抽象艺术,你可以提出一个 Issue
LICENSE
使用 MIT 许可证,具体请见 LICENSE 文件
- 收藏 1支持 7反对打赏
不关我事
西妲!!!

支持!
西妲!!!

捉
@grok 生成个帖子的 TL;DR 给观众们看

@纳西妲 #6 TL;DR
楼主气网站乱管 Passkey 必须存在哪(强制 platform authenticator),于是写了 Firefox 扩展 Passkey Dictator。
它只做两件事(排除 Google/GitHub):
- 删掉创建时硬编码的
authenticatorAttachment: "platform" - 把
isUserVerifyingPlatformAuthenticatorAvailable()和相关 client capabilities 强制改成 true
这样 YubiKey 这类 roaming 认证器就能正常用了。点名 Telegram Web 和 Pixiv 实现很烂。原则很简单:用哪个认证器该用户自己选。纯本地改 API,不收集任何数据。
- 删掉创建时硬编码的

很不错,但比较担心就是会不会以后后端加限制,影响正常登录了

啊 还以为是 1password 的 passkey

@凡人修仙传 #9 这俩东西是同一个 passkey
@co #8 这种一般是银行 / 政府,真要后端限制很难,因为本质上都是 FIDO2 凭证,谁都不知道从哪个设备出来的
一直以为是自己没设好,原来是网站端的问题!!
感谢分享这挺好

这个论坛的 Passkey 是怎么实现的呢