Ionic如何使用Android Keystore与iOS Keychain实现认证令牌加密存储
Ionic Capacitor 安全加密存储授权令牌实现方案
现有问题说明
你当前使用的默认Capacitor Storage(已合并入Capacitor官方@capacitor/preferences插件)默认未开启加密,才会出现令牌明文存储在IndexedDB相关文件的问题,root/越狱设备可直接提取明文数据。
实现方案
方案1:官方@capacitor/preferences插件开启加密(推荐,迁移成本最低)
Capacitor 4及以上版本的Preferences插件原生支持对接Android Keystore、iOS Keychain实现存储内容自动加密,无需额外引入第三方依赖:
- 安装插件并同步原生项目
npm install @capacitor/preferences npx cap sync
- 在
capacitor.config.ts中开启加密配置
import { CapacitorConfig } from '@capacitor/cli'; const config: CapacitorConfig = { // 其他原有配置 plugins: { Preferences: { encrypt: true } } }; export default config;
- 基础用法和原Capacitor Storage完全一致,原有代码几乎不需要修改:
import { Preferences } from '@capacitor/preferences'; // 存储授权令牌 await Preferences.set({ key: 'auth_token', value: '你的登录授权令牌' }); // 读取授权令牌 const { value: authToken } = await Preferences.get({ key: 'auth_token' }); // 删除授权令牌 await Preferences.remove({ key: 'auth_token' });
开启加密后,所有存储内容会自动用系统安全硬件生成的密钥加密,加密密钥不会暴露给应用层,就算拿到root/越狱设备的文件权限,也无法直接解密得到明文令牌。
方案2:社区加密存储插件(适合更高安全要求场景)
如果需要额外的安全配置(比如生物识别校验才能读取、密钥有效期设置等),可以使用Capacitor社区维护的@capacitor-community/encrypted-storage插件:
- 安装插件并同步
npm install @capacitor-community/encrypted-storage npx cap sync
- 基础用法
import { EncryptedStorage } from '@capacitor-community/encrypted-storage'; // 初始化插件,自动对接系统安全存储生成密钥 await EncryptedStorage.init(); // 存储令牌 await EncryptedStorage.set({ key: 'auth_token', value: '你的登录授权令牌' }); // 读取令牌 const { value: authToken } = await EncryptedStorage.get({ key: 'auth_token' });
方案3:自定义加密层(适合特殊加密规则需求)
如果以上两种方案都不满足你的自定义加密规则要求,可以自行封装加密逻辑,密钥依然存在系统安全存储中:
- 用
@capacitor/keychain-access插件将加密密钥存储到iOS Keychain和Android Keystore中,避免密钥明文暴露 - 存储令牌时,用AES-256等对称加密算法,用安全存储的密钥加密明文令牌,再将密文存入普通本地存储
- 读取时先从Keychain/Keystore取出密钥,再解密密文得到明文令牌
内容的提问来源于stack exchange,提问作者subash sharma
相关产品推荐
相关产品推荐

