You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用户能否清除Keychain数据?存储恢复PIN标记选Keychain还是AsyncStorage

恢复PIN相关本地存储方案选型建议

核心存储原则

首先要区分两类数据的安全等级,分开选择存储方案:

  • 高敏感的恢复PIN本身:必须存储在Keychain中,禁止存入AsyncStorage。AsyncStorage属于明文持久化方案,无系统级加密保护,越狱/root设备可直接读取明文,完全不满足敏感凭据的存储安全要求。
  • isRecoveryPinSetup状态标记:属于非敏感的快捷判断字段,可根据业务需求选择存储方案。

两种存储方案的对比&顾虑解答

Keychain相关顾虑解答

用户确实有权限主动清除Keychain数据:iOS端可通过系统设置删除对应应用的Keychain条目、重置系统密码配置清空;安卓端可通过清除应用数据、重置系统删除相关内容。该行为属于用户主动操作,不需要额外兜底,数据清空后引导用户重新设置PIN即可,不存在体验问题。

其他需要考量的Keychain配置点

  • 跨设备同步是可配置项:如果不需要多设备自动预填PIN的功能,可以在存储时关闭iCloud/Google备份同步开关,避免跨设备同步带来的额外安全风险。
  • 卸载保留特性是可配置项:如果不希望应用卸载重装后仍保留PIN数据,可以为Keychain存储项添加「仅当前安装实例有效」的属性(iOS设置kSecAttrAccessible对应枚举、安卓设置对应认证参数),即可实现应用卸载后Keychain数据自动清除。

最终推荐方案

兼顾你减少网络请求的需求,建议按以下逻辑实现:

  1. 恢复PIN本身调用Keychain.setGenericPassword(username, password)存入Keychain,根据业务需要配置同步、访问权限参数。
  2. 状态标记调用AsyncStorage.setItem('isRecoveryPinSetup', true)存入AsyncStorage,作为冷启动时的优先判断依据:
    • 标记存在且为true,直接跳过PIN设置引导
    • 标记不存在时,仅发起1次服务端查询确认用户是否已备份PIN,同步本地标记状态即可,不会产生多余的频繁网络请求。

内容的提问来源于stack exchange,提问作者david_adler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:36:02