06
Passkey 创建 · navigator.credentials.create()
测的是管理器愿不愿意在这个 origin 上帮你建 passkey:弹不弹选择器、存不存进自己的库。
webauthncreate()no-server
RP 上下文 · 决定 passkey 归属
改这个 = 换站点,管理器的既有条目会全部失效
rp.id…
origin…
isSecureContext…
公后缀域 (PSL)…
PSL 判定:若 rp.id 本身就在 Public Suffix List(如 github.io),浏览器会警告"public-suffix 域上的 passkey",部分管理器直接拒绝。详见 index.html#deploy。
IDENTITY · 写入 create() 的 user 对象
autocomplete=username
autocomplete=name
RESIDENT KEY (可发现性)
required = 钥匙存在设备上,才能被"无 allowCredentials 的登录"和自动建议发现
USER VERIFICATION
required 强制生物识别/PIN;discouraged 可无 UV 登录(很多管理器不允许)
AUTHENTICATOR ATTACHMENT
platform=本机 TouchID/Hello;cross=安全Key/手机扫码
ATTESTATION
enterprise/direct 会触发企业策略与额外确认弹窗
TIMEOUT(S)
RESULT · create() 返回值解剖—
按 CREATE PASSKEY 开始。未创建时这里为空。
STORED CREDENTIALS · 本页 localStorage 记录
这里只是本站自己的登记簿。管理器是否也存了一份,要到管理器的应用内界面去确认——这是本测试唯一无法自动判定的部分。
KNOWN FAILURE MODES
- SecurityError:不在 HTTPS(或 localhost)下必然出现,file:// 打开本站一定失败。
- NotAllowedError 最常见:用户取消、超时、或本机没有平台认证器却指定了 attachment=platform。
- 无服务器的局限:challenge 由页面生成、也只由页面校验,签名没有经服务端验证。测"能否弹选择器/是否入库"够用,测真实认证强度不够。
- 某些管理器把 discoverable credential 视为"账号",创建完立刻出现在密码建议里;另一些只在 rp.id 完全一致时才列出来。切子域去对比。
- 带 att=enterprise/direct 时,企业受管设备可能弹额外同意框,或整体被策略禁用。