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 扩展:openssljsonsessionmbstring
  • 生产环境必须使用 HTTPS;localhost 可用于本地 HTTP 测试。RP ID 必须是域名,不能填写 IP 地址或公共后缀(如 comco.uk)。
  • 浏览器需支持 WebAuthn,例如 Chrome 67+、Firefox 60+、Safari 13+、Edge 18+;移动端版本以浏览器实际支持情况为准。

安装

  1. Passkey 目录复制到 Typecho 的 usr/plugins/
  2. 在后台“控制台 → 插件”启用 Passkey。
  3. 打开插件设置,确认 RP 名称、RP ID 和来源域名。
  4. 退出登录,在 /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 脚本及样式。

版本与许可

猜你喜欢