Skip to content

身份认证

源码: src/services/auth/


认证类型区分

本应用涉及两种不同的认证概念,MUST 明确区分:

钱包锁 (Wallet Lock)

属性说明
作用域本地应用层面
用途加密存储在设备上的助记词/私钥
实现形式九宫格图案锁 (3x3 Pattern Lock)
存储位置不存储,仅用于派生加密密钥
是否必需是(Web 适配器要求)

交易密码 / 二次签名 (Pay Password)

属性说明
作用域链上层面(仅 BioForest 链)
用途交易的二次签名,防止私钥泄露后资产被盗
存储位置链上存储 secondPublicKey
是否可修改否(链上不可变)

关系图

┌─────────────────────────────────────────────────────────────────┐
│                         用户视角                                │
├─────────────────────────────────────────────────────────────────┤
│  创建钱包 ──► 设置【钱包锁图案】──► 加密助记词存储到设备        │
│                                                                 │
│  设置二次签名 ──► 设置【安全密码】──► 链上记录 secondPublicKey  │
│                                                                 │
│  转账时:                                                        │
│    1. 绘制【钱包锁图案】解锁助记词                              │
│    2. 如有二次签名,还需输入【安全密码】                        │
└─────────────────────────────────────────────────────────────────┘

开发注意事项

约束级别要求
MUST在 UI 中使用不同的术语区分两者
MUST NOT混淆 walletLock/patternKeytwoStepSecret 变量命名
SHOULD钱包锁使用图案锁组件,安全密码使用密码输入框
SHOULD检查 secondPublicKey 存在时才请求安全密码

认证方式对比

方式场景安全级别便捷性
图案锁首次解锁、敏感操作
生物识别日常解锁、快捷支付

应用锁规范

锁定状态

typescript
interface LockState {
  isLocked: boolean           // 当前锁定状态
  isWalletLockEnabled: boolean // 是否启用钱包锁
  isBiometricEnabled: boolean  // 是否启用生物识别
  lastUnlockTime: number       // 上次解锁时间
  autoLockTimeout: number      // 自动锁定时间(分钟)
}

解锁流程

用户打开应用


检查是否启用锁定

    ├── 未启用 ──► 直接进入

    └── 已启用


    检查生物识别是否可用

         ├── 可用 ──► 提示指纹/面容解锁
         │            │
         │            ├── 成功 ──► 解锁
         │            │
         │            └── 失败 ──► 回退图案锁

         └── 不可用 ──► 显示图案锁

                        ├── 正确 ──► 解锁

                        └── 错误 ──► 显示错误 + 重试

自动锁定规范

触发条件

条件说明可配置
超时无操作设定时间内无用户活动
应用切后台应用进入后台
屏幕锁定设备屏幕锁定

超时选项

选项默认
1 分钟
5 分钟
15 分钟
30 分钟
从不

活动监听

以下用户活动 SHOULD 重置超时计时器:

  • 触摸/点击事件
  • 滚动事件
  • 键盘输入
  • 导航操作

生物识别认证

支持类型

类型平台
Touch IDiOS
Face IDiOS
FingerprintAndroid

启用流程

用户进入安全设置


开启"生物识别解锁"


验证钱包锁图案 ← 确保用户是钱包所有者

    ├── 图案错误 ──► 显示错误

    └── 图案正确


    检查设备生物识别可用性

         ├── 不可用 ──► 显示提示

         └── 可用


         验证生物识别

              ├── 成功 ──► 启用功能

              └── 失败 ──► 显示错误

认证要求

约束级别要求
MUST启用前验证钱包锁图案
MUST检查设备是否支持生物识别
MUST提供回退到图案锁的选项
SHOULD显示生物识别类型名称
SHOULD记录启用状态到安全存储

转账确认规范

确认层级

操作认证要求
查看余额无需认证
查看地址无需认证
小额转账生物识别
大额转账图案锁
查看助记词图案锁
删除钱包图案锁

确认流程

用户发起转账


判断金额级别

    ├── 大额(>阈值)──► 强制图案锁验证

    └── 小额


    检查生物识别是否启用

         ├── 已启用 ──► 生物识别验证
         │            │
         │            ├── 成功 ──► 执行转账
         │            │
         │            └── 失败 ──► 回退图案锁

         └── 未启用 ──► 图案锁验证

钱包锁验证 UI 模式

页面级别验证 (Full Page)

适用场景:

  • 验证是主要流程的一部分
  • 验证后有后续操作需要在同一页面完成
  • 需要更多上下文信息展示
页面说明
修改钱包锁验证当前图案 → 设置新图案
查看助记词验证后在页面内展示助记词

底部抽屉验证 (Bottom Sheet)

适用场景:

  • 验证是即时确认
  • 验证后立即执行操作并关闭
  • 需要保持上下文
场景说明
转账确认弹出验证后执行转账
删除钱包确认删除操作

选择决策树

需要钱包锁验证?


验证后是否有后续操作?

    ├── 是 ──► 需要停留在页面操作?
    │         │
    │         ├── 是 ──► 使用【页面级别验证】
    │         │
    │         └── 否 ──► 使用【底部抽屉验证】

    └── 否(即时确认)──► 使用【底部抽屉验证】

错误处理规范

认证错误

错误类型处理方式
图案错误显示错误动画 + 清空输入
生物识别取消显示图案锁
生物识别失败提示重试或使用图案锁
生物识别锁定强制使用图案锁

错误次数限制

约束级别要求
SHOULD连续错误后增加延迟
SHOULD错误次数过多时临时锁定
MAY支持错误通知(邮件/推送)

相关文档

Released under the MIT License.