Skip to content

Development

何家欢 edited this page Jun 20, 2026 · 2 revisions

Development

代码地图

jstu_passkey/app.py                 Flask、OAuth、统一 Passkey 验证
jstu_passkey/management.py          管理页面与 API
jstu_passkey/config.py              环境变量与默认值
jstu_passkey/storage.py             SQLite、用户、凭据、client、日志
jstu_passkey/webauthn_service.py    WebAuthn options 与验证
jstu_passkey/static/                浏览器交互
jstu_passkey/templates/             品牌页、Management、示例页
tests/                              单元与集成行为

修改原则

  • 新的浏览器认证入口必须复用标准 Logo 页,不要再次复制 navigator.credentials.get()
  • OAuth 示例与生产 Client 使用同一管道
  • Management 写操作继续要求 admin、CSRF 和 recent Passkey
  • 数据库 v2 不增加旧 schema 自动迁移
  • 用户界面统一使用 Passkey 文案
  • 用户取消是普通动作,不展示原始浏览器异常
  • 代码行为变化时同步 README、docs/ 与 Wiki

验证

.venv/bin/python -m unittest discover -s tests -v
.venv/bin/python -m compileall -q jstu_passkey tests
node --check jstu_passkey/static/main.js
node --check jstu_passkey/static/management.js
node --check jstu_passkey/static/oauth_authorize.js
git diff --check

如果 .venv 没有 pytest,测试套件本身使用 unittest,不需要为了运行测试修改依赖。

安全审查提示

重点检查 source-to-sink:

  • 任意 URL 是否能进入 redirect
  • client secret 是否可能到达浏览器
  • state/code/challenge 是否可重放
  • credential 是否可能绑定错误用户
  • Management 是否存在绕过 recent reauth 的写入口
  • 日志与 CSV 是否包含 secret、token、session 或 credential public key

Clone this wiki locally