Skip to content

NativeStar/WebAuthCompat

Repository files navigation

WebAuthn Compat

项目99%使用Vibe Coding 用于在部分支持扩展但不兼容WebAuthn的浏览器中提供polyfill

当然如果你不介意安全性且追求方便 在正常支持该API的浏览器上装也完全可行(比如用自动授权)

如果出现问题去设置里开启兼容模式后刷新网页再试(Chromium 137及以上应该是不用的 如KiwiBrowser)

已在KiwiBrowser 狐猴浏览器 雨见浏览器上测试通过(后面两个要打开兼容模式)

至于安全性...当没有就好 至少能用了吧(雾)

以下是AI写的

WebAuthn Compat 是一个 Chrome 浏览器扩展,为不支持或 WebAuthn 工作异常的浏览器提供 WebAuthn API 的兼容性支持。

项目特点

  • 完整的 WebAuthn 支持:实现 navigator.credentials.create()get() API
  • 多算法支持:ES256、ES384、RS256、PS256
  • 双模式架构:标准模式和兼容模式,适应不同浏览器环境
  • 安全检查:rpId 验证、iframe 检测等安全警告
  • 凭证管理:完整的凭证管理界面,支持导入导出
  • 自动同意:可配置的自动授权功能
  • Conditional UI:支持密码管理器自动填充场景
  • Manifest V3:使用最新的扩展标准

安装

从源码安装

  1. 克隆或下载本仓库
  2. 打开 Chrome 浏览器,访问 chrome://extensions/
  3. 启用右上角的「开发者模式」
  4. 点击「加载已解压的扩展程序」
  5. 选择本项目的根目录

使用说明

基础使用

安装后,扩展会自动在所有网页上替换 navigator.credentials API。当网站尝试使用 WebAuthn 进行注册或登录时:

  1. 扩展会弹出确认窗口,显示操作详情
  2. 您可以查看 RP ID、用户信息、安全警告等
  3. 滑动确认或点击拒绝按钮
  4. 凭证会安全地存储在浏览器本地

凭证管理

点击浏览器工具栏中的扩展图标,打开管理界面:

  • 查看凭证:展开凭证卡片查看详细信息
  • 删除凭证:点击删除按钮移除不需要的凭证
  • 导出凭证:点击导出按钮,将凭证导出为 JSON 格式
  • 导入凭证:在导入区域粘贴 JSON 数据,选择冲突策略后导入

全局设置

在管理界面底部可以配置:

兼容模式

  • 何时启用:当浏览器不完全支持某些扩展 API(如 chrome.system.display)时启用
  • 区别:兼容模式使用页面内 Shadow DOM 弹窗,而非原生扩展窗口
  • 适用场景:基于 Chromium 但 API 支持不完整的浏览器

AAGUID 配置

选择模拟的认证器类型,可选:

  • 空值(默认)
  • Google Password Manager
  • YubiKey 5 系列
  • Windows Hello
  • Android 平台认证器
  • iCloud Keychain passkeys

安全设置

  • 禁用 excludeCredentials 检查:允许重复注册相同凭证
  • 禁用 appidExclude 检查:忽略 U2F 兼容性检查

自动同意功能

在认证(get)操作时,如果只有单个凭证匹配:

  • 可勾选「记住选择,下次自动授权」
  • 下次访问该网站时,将跳过确认窗口自动完成认证
  • 在管理界面的「自动同意管理」区域可以查看和取消

注意:多凭证场景下此功能会被禁用,以确保用户可以选择具体使用哪个凭证。

支持的 WebAuthn 扩展

扩展名 操作 说明
credProps create 返回凭证属性(rk=false)
minPinLength create 返回最小 PIN 长度
credBlob create 存储小型数据到凭证
getCredBlob get 读取凭证中存储的数据
appid get U2F 向后兼容支持
appidExclude create U2F 凭证冲突检查

技术架构

标准模式

页面脚本 (inject.js)
    ↕ postMessage
内容脚本 (content.js)
    ↕ chrome.runtime.sendMessage
后台脚本 (background.js) → Service Worker
    ↓
用户确认弹窗 (popup/popup.html)

兼容模式

页面脚本 (inject-compat.js)
    ↕ postMessage (仅存储操作)
内容脚本 (content.js)
    ↓
页面内 Shadow DOM 弹窗

常见问题

Q: 为什么需要这个扩展?

A: 部分浏览器虽然基于 Chromium,但 WebAuthn API 可能存在问题或完全不支持。此扩展提供了软件实现的 WebAuthn,让这些浏览器也能使用 Passkey 等现代认证方式。

Q: 凭证安全吗?

A: 凭证存储在 chrome.storage.local 中,仅限扩展访问,其他网页无法读取。但请注意,这不如硬件安全密钥安全,不建议用于高安全性场景。

Q: 什么时候应该启用兼容模式?

A: 当您遇到以下错误提示时:

  • "当前浏览器不完全支持扩展API,请尝试在设置中开启兼容模式"
  • 弹窗无法正常显示

通常在扩展 API 支持不完整的浏览器中需要启用。

Q: 可以在多个浏览器之间共享凭证吗?

A: 可以!使用导出/导入功能:

  1. 在原浏览器中导出凭证为 JSON
  2. 在新浏览器中安装扩展
  3. 导入 JSON 数据

Q: 支持哪些网站?

A: 理论上支持所有使用标准 WebAuthn API 的网站,包括但不限于:

  • GitHub
  • Google
  • Microsoft
  • 各种支持 Passkey 的网站

测试

可以在以下网站测试 WebAuthn 功能:

技术细节

  • Manifest Version: V3
  • 最低 Chrome 版本: 93+
  • 开发语言: 纯 JavaScript(无构建工具)
  • 密码学: Web Crypto API
  • 存储: chrome.storage.local

更多技术细节请参考 CLAUDE.md

贡献

欢迎提交 Issue 和 Pull Request!

许可证

本项目采用 GPL 许可证。

声明

本扩展仅供学习和研究使用,提供的 WebAuthn 实现为软件模拟,不具备硬件安全密钥的安全性。在生产环境和高安全性场景中,请使用硬件安全密钥或浏览器原生 WebAuthn 支持。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published