Passkey
插件/ 2026-09-18/0/ 编辑
Passkey
Passkey 是 Typecho 的 WebAuthn/FIDO2 无密码登录插件。用户可以使用指纹、Face ID、设备 PIN、安全密钥或密码管理器中的 Passkey 登录,无需在插件中保存密码。
下载
功能
- 自动向 Typecho 原生
/admin/login.php 注入“使用 Passkey 登录”按钮,也支持自定义主题手动接入。 - 已登录用户可绑定多个设备;在“控制台 → Passkey 管理”中查看、注册和删除自己的凭证。
- 管理员可按用户搜索凭证并撤销,但不能代替用户完成注册。
- 记录登录时间、设备/浏览器、IP 和状态,支持分页及按期限清理。
- 支持普通用户 Passkey 开关和 Passkey 注册新账户(新账户默认为 subscriber)。
- 支持 ES256、RS256,校验 challenge、Origin、RP ID、签名、用户验证状态和签名计数器。
- 内置 CSRF/同源校验、会话超时、速率限制、凭证长度限制和安全日志。
- 默认模式兼容 Bitwarden、1Password、YubiKey 等第三方验证器;提供安全、默认、普通三档策略。
- 支持 MySQL、SQLite 和 PostgreSQL,激活时自动创建并升级数据表。
环境要求
- Typecho 1.2+(建议使用 Typecho 1.3.x)。
- PHP 8.0+。插件激活检查虽兼容 PHP 7.0,但当前代码使用
str_starts_with() / str_ends_with(),实际运行建议 PHP 8.0 或更高版本。 - PHP 扩展:
openssl、json、session、mbstring。 - 生产环境必须使用 HTTPS;
localhost 可用于本地 HTTP 测试。RP ID 必须是域名,不能填写 IP 地址或公共后缀(如 com、co.uk)。 - 浏览器需支持 WebAuthn,例如 Chrome 67+、Firefox 60+、Safari 13+、Edge 18+;移动端版本以浏览器实际支持情况为准。
安装
- 将
Passkey 目录复制到 Typecho 的 usr/plugins/。 - 在后台“控制台 → 插件”启用 Passkey。
- 打开插件设置,确认 RP 名称、RP ID 和来源域名。
- 退出登录,在
/admin/login.php 点击“使用 Passkey 登录”完成首次注册或登录。
激活时会创建以下数据表(自动使用 Typecho 数据库前缀):
passkey_credentials:用户凭证、公钥、计数器和使用时间。passkey_login_logs:Passkey 登录成功或失败记录。
插件设置
| 设置 | 说明 |
|---|
| 注入模式 | 自动注入适用于原生 Typecho 后台登录页;自定义主题登录页选择手动添加,并复制设置页生成的代码。 |
| RP 名称 | 显示在系统验证提示中的站点名称。 |
| RP ID | 通常填写站点域名,如 example.com,不要带协议、路径或端口。修改后旧凭证不能直接迁移。 |
| 允许的来源域名 | 每行一个完整 Origin,可用 `https://www.example.com \ | example.com` 指定 RP ID;不支持通配符。 |
| 允许普通用户使用 Passkey | 关闭后普通用户不能注册或使用 Passkey,管理员不受影响。 |
| 允许 Passkey 注册新用户 | 允许未登录访客创建账户;同时必须开启 Typecho“设置 → 基本 → 允许注册”。 |
| 安全级别 | 安全仅平台验证器并拒绝可同步凭证;默认兼顾安全与兼容性;普通适合开发测试,不建议生产使用。 |
| IP 识别策略 | 默认读取 REMOTE_ADDR。站点位于可信 CDN/反向代理后时,可选择代理头或自定义请求头。 |
| 登录日志保留期限 | 永久、7/30/90/180/365 天;在查看或记录日志时清理过期记录。 |
| 禁用插件时的数据处理 | 默认保留数据;选择删除会永久删除所有凭证和登录日志。 |
多域名配置示例
https://example.com | example.com
https://www.example.com | example.com
https://other.net | other.net
只填写自己控制的 HTTPS 来源。更改 RP ID 后,请保留密码登录方式并让用户重新注册 Passkey。
使用说明
- 登录:在 Typecho 后台登录页点击“使用 Passkey 登录”,按浏览器提示完成设备验证。
- 绑定设备:登录后进入“控制台 → Passkey 管理 → 注册新 Passkey”。同一账户最多绑定 20 个凭证。
- 删除凭证:删除后对应设备立即不能再使用该凭证登录,操作不可恢复。
- 新用户注册:开启插件注册、Typecho 全局注册后,未识别的 Passkey 会提示填写用户名、邮箱和昵称,完成后自动创建 subscriber 账户并登录。
- 自定义主题:选择“手动添加”后,复制插件设置页生成的 HTML/JS 代码,放在主题登录表单后;不要修改 Typecho 核心文件。
安全建议
- 始终保留密码登录作为恢复方式,尤其是使用“安全”策略或准备修改 RP ID 时。
domainOrigins 必须使用精确来源,不要填写不受控域名或通配符。- 只有在 CDN/反向代理可信且会覆盖请求头时,才使用
X-Forwarded-For 或自定义 IP 请求头,否则可能影响速率限制判断。 - 禁用插件默认保留数据库;确认不再使用时,再选择删除数据。
文件结构
Plugin.php:插件注册、配置、数据库初始化和资源注入。Action.php:注册、登录、凭证及日志接口。WebAuthn.php:WebAuthn 数据解析和签名验证(仅 ES256/RS256)。DomainPolicy.php:Origin 与 RP ID 白名单校验。Panel.php:后台凭证和登录日志管理页面。assist/:前端 WebAuthn 脚本及样式。
版本与许可