安全存储令牌对于移动应用程序安全至关重要。令牌是用户帐户、敏感数据和服务的钥匙。如果被破坏,它们可以导致 身份盗窃、金融欺诈和数据泄露Protect them:
关键点:
- 使用本地原生安全存储: 在 iOS Keychain 或 Android Keystore 中存储令牌以实现硬件级安全保护。
- : 使用工具如(Android) 或
EncryptedSharedPreferences(iOS) 进行安全加密。CryptoKit: 使用短期令牌和令牌刷新轮换来降低风险。 - : 始终使用 HTTPS 并实现证书固定以防止拦截。__CAPGO_KEEP_0__
- __CAPGO_KEEP_0____CAPGO_KEEP_0__
- 管理令牌生命周期: 定期过期、刷新和撤销令牌以最小化盗窃造成的损害。
存储方法快速比较:
| 存储方法 | 安全性 | 易用性 | 最佳用途 |
|---|---|---|---|
| 内存存储 | 高 | 低 | 短会话、高安全性需求 |
| 本地存储 | 低 | 高 | 非敏感数据 |
| 安全Cookie | 高 | 中 | 带有服务器端控件的Web应用 |
| iOS Keychain | 非常高 | 中 | iOS应用程序存储敏感令牌 |
| Android Keystore | __CAPGO_KEEP_0__ | __CAPGO_KEEP_0__ | Android 应用程序需要安全存储 |
| 自定义加密 | 变量 | __CAPGO_KEEP_0__ | 特殊安全要求 |
首先审计您的应用程序当前令牌存储方法,并实施这些最佳实践以保护您的用户和您的品牌。
移动设备上的安全存储现实:伪造磁盘加密 - 丹尼尔梅耶 & 德鲁苏亚雷斯
安全令牌存储的基本规则
保护令牌需要多层安全措施。通过结合多个安全保障措施,确保如果一个措施失败,其他措施仍然保护敏感数据。对于 Capacitor 应用程序,遵循这些实践至关重要,以在各个平台上维护令牌安全。
使用 HTTPS 和证书固定
HTTPS 加密是您防止令牌截获的第一道防线。您的应用程序和服务器之间的每次交互都必须使用 HTTPS 来加密在传输中的数据,防止攻击者窥探。
为了进一步加强这一点, 实施证书固定。对于Capacitor应用程序, @capgo/capacitor-ssl-pinning 将 HTTPS 连接固定到 iOS 和 Android 上的 CapacitorHttp 的捆绑证书中。这一技术确保您的应用程序始终与您信任的服务器通信,即使有人尝试使用伪造的证书。通过在应用程序中硬编码您的服务器的证书或公钥,您建立了应用程序和服务器之间的直接信任关系。
“You should pin anytime you want to be relatively certain of the remote host’s identity or when operating in a hostile environment. Since one or both are almost always true, you should probably pin all the time.” – OWASP pinning cheat sheet [5]
在真实世界中:Twitter 在其移动应用程序中引入了证书固定,之后经历了中间人攻击(MitM)。他们的团队将服务器的 SSL 证书公钥直接嵌入到应用程序中。当用户连接时,应用程序验证证书是否与固定证书匹配。如果没有匹配,连接立即终止。这一方法显著减少了 MitM 攻击和提高了用户对平台的信心。 [5].
您可以选择 证书固定 (验证整个证书)以获得最高安全性 公钥固定 (仅验证公钥) 以便在证书续期时具有更大的灵活性。类似工具 OkHttp 用于 Android Alamofire 用于 iOS 简化了这些技术的实现 [5].
一旦安全传输建立起来,下一步就是最小化令牌暴露
限制令牌暴露
减少令牌暴露涉及限制令牌的范围和有效期。想法很简单:令牌的有效时间越短,权限越少,越低风险如果它被破坏
- 使用 短期访问令牌 与刷新令牌配对以维持用户会话而不在设备上保留长期访问令牌。这一方法确保盗窃的令牌迅速变得无用
- Apply the 最小特权原则。例如,如果一个令牌仅需要读取用户资料数据,不要授予它修改账户设置或访问支付细节的权限
- Enable 令牌旋转,令牌每次被用来请求新的访问令牌时都会发出新的令牌。如果一个令牌被盗用,它在合法应用程序使用它后就会失效,从而减少了风险窗口 [4].
通过限制令牌的暴露,减少了由于违规行为造成的重大损害的机会。接下来,令牌的加密确保即使设备被物理破坏,令牌也仍然安全
令牌在休眠状态下加密
令牌在休眠状态下加密 可以保护设备上的令牌。即使设备丢失、被盗或被恶意软件破坏,令牌也仍然无法读取
现代移动操作系统提供了安全、硬件支持的存储选项,这比标准方法如Android上的SharedPreferences或iOS上的NSUserDefaults要可靠得多 [4].
- Android: 使用
EncryptedSharedPreferences(适用于 Android 10 和更高版本). 这个工具会自动处理加密和密钥管理,简化了实现,同时提高了安全性。例如,SecureJWTStorage类可以安全地存储和检索 JWT 使用EncryptedSharedPreferences没有需要复杂的自定义加密code. - 对于 iOS: Keychain 提供硬件级别的加密来实现安全令牌存储。开发者可以使用一个
KeychainHelper类来管理 JWT 令牌或通过在 Keychain 中存储令牌之前使用 CryptoKit 来加密令牌,添加额外的安全层。 [4].
Android 和 iOS 都利用了硬件背后的加密,例如 iOS 中的 Secure Enclave 和 Android 中的 Hardware Security Module。这些组件在操作系统主体隔离的防篡改硬件中存储加密密钥。
最后,建立明确的数据保留政策。自动删除过期令牌,并在不再需要时从设备中安全删除敏感数据。这些实践确保令牌只存储在绝对必要的时间内 [6].
平台特定的令牌存储方法
每个移动平台都提供了自己的工具来保护令牌,针对安全和用户体验的需求。这些本地选项基于核心实践,如HTTPS、加密和限制暴露,这些实践在前面已经讨论过。
Android: Keystore 和 EncryptedSharedPreferences

Android 设备通过 Keystore 系统 和 EncryptedSharedPreferences提供了强大的令牌保护。Keystore 系统安全存储加密密钥,在受保护的环境中,使其难以提取并确保其不可导出。这意味着密钥只能用于安全操作。此外,您还可以添加限制,如要求用户身份验证。对于运行 Android 9 (API 等级 28) 或更高版本的设备, StrongBox KeyMint 提供了与标准信任执行环境 (TEE) 相比更大的隔离。要检查是否可用,请使用 FEATURE_STRONGBOX_KEYSTORE,并启用它 KeyGenParameterSpec.Builder.setIsStrongBoxBacked().
EncryptedSharedPreferences 提供了一个更简单的方式来安全地存储键值对。它会对数据进行加密,并安全地管理密钥,支持 API 等级 23 以上。
“仅需几行 code,我们就可以显著提高安全性,通过使用它来实现这一点。它是一个强大且易于使用的解决方案,用于在 Android 应用中安全地存储敏感数据。” 为了最佳实践,应实现错误处理、每 90-180 天轮换密钥以及避免在 SharedPreferences 中存储高度敏感数据(如信用卡号码)。此类数据应在安全的后端处理。 iOS:Keychain 和 Secure Enclave
EncryptedSharedPreferences在 iOS 上,令牌安全依赖于 Keychain 和 Secure Enclave
token security
Keychain Secure Enclave
token security Keychain Secure Enclave token securityThe Keychain 是一个使用 AES-256-GCM 加密的安全存储库,用于敏感数据,如密码和令牌。它采用双钥系统:一个用于元数据的钥匙和每个存储项的唯一钥匙。元数据钥匙由 Secure Enclave 保护,缓存它们以实现更快的查找,秘密钥匙需要将其发送到 enclave 以实现额外的安全性。Keychain 还支持来自同一开发者的应用之间的安全共享项,通过 securityd daemon
管理。 kSecAttrAccessibleWhenUnlockedSecure Enclave 使用 P256 钥匙和约 4 MB 的安全存储来增强保护。您可以通过配置访问控制列表(ACL)来进一步加强安全性,要求 Face ID、Touch ID 或密码验证使用设置,如 .whenPasscodeSetThisDeviceOnly 。为了实现更严格的安全性,
Capacitor__CAPGO_KEEP_0__

For cross-platform apps, Capacitor offers secure storage plugins that simplify token security without requiring platform-specific code. 对于跨平台应用,capgo 提供了安全存储插件,简化令牌安全性而不需要平台特定的capacitor。 @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-data-storage-sqlite @capgo/capacitor-persistent-account 在 iOS 上,插件将数据存储在加密的系统 Keychain 中,而在 Android 上,插件使用 AES 在 GCM 模式下加密数据,使用由 Android Keystore 生成的密钥,然后将其保存在 SharedPreferences 中。对于 web 环境,插件使用未加密的数据, localStorage - 但仅用于调试目的。
2025 年 2 月,martinkasa 更新了 capacitor-secure-storage-plugin 以支持 Capacitor v7,确保了 iOS 和 Android 上的字符串值的安全存储。这些插件适合用于存储登录凭证和 JSON 数据。然而,它们可能缺乏原生解决方案提供的细粒度控制。对于具有高级安全需求的企业级应用,原生选项如 iOS Keychain Services 和 Android Keystore APIs - 或增强工具如 Ionic’s Identity Vault - 可能更合适。 Capacitor 的官方文档还建议使用原生安全存储来处理敏感数据,例如加密密钥或会话令牌。
在部署 Capacitor 应用的实时更新时,服务如 Capgo 可以进一步增强令牌安全性。 Capgo 的端到端加密确保了更新 - 包括包含安全补丁或令牌管理改进的更新 - 将安全地传递,维护了应用程序安全框架的完整性。
管理令牌生命周期和安全性
{"targetLanguage":"Simplified Chinese","protectedTokens":["Cloudflare","Capacitor","GitHub","Capgo","code","API","SDK","CLI","npm","bun"],"texts":["有效地管理令牌涉及监控令牌的创建、过期和撤销。开发者需要设计系统以平衡强大的安全措施和流畅的用户体验。以下,我们深入探讨令牌过期、撤销和安全的OTA更新策略,以帮助您构建全面令牌管理方法。"]}
"令牌过期和刷新方法"
"使用短期访问令牌和长期刷新令牌是安全令牌处理的关键实践。访问令牌应在5-15分钟内过期,以减少被破坏的风险。另一方面,刷新令牌可以保持几天或几周的有效期,允许用户保持会话而不需要频繁重新验证。"]}
"令牌过期在保持API安全和高效方面起着至关重要的作用" [7]"将令牌过期与令牌轮换(先前发行的令牌无效化)结合使用,会提供额外的保护。这种方法可以最小化因刷新令牌被破坏而造成的损害,并且还可以帮助识别可疑活动,例如旧令牌的重用。"]}
当设计刷新机制时,确保令牌在刷新过程中严格验证。使用速率限制来防止暴力攻击,并使用自动监控来检测异常,例如来自多个位置的刷新请求。平衡安全性和性能是保护用户会话而不影响整体体验的关键。
令牌撤销和失效
虽然令牌失效是至关重要的,但令牌撤销在用户注销、丢失设备或疑似安全漏洞等场景中提供了另一个安全层。尽管无状态JWT访问令牌在失效前保持有效,但有效地管理刷新令牌可以阻止新访问令牌的颁发。
撤销令牌及时防止未经授权的访问敏感资源 [8]要立即失效令牌,请考虑在API请求期间实施服务器端黑名单,跟踪撤销令牌并在请求期间检查它们。此外,单点注销(SLO)功能允许用户在一个操作中终止多个身份验证会话,确保所有相关的刷新令牌在连接的服务中都已撤销。
在处理被破坏的令牌时,也很重要。这些协议应包括立即令牌撤销、自动安全警报、及时通知受影响用户以及与受损令牌相关的所有活动会话的终止。
使用OTA系统进行令牌安全更新
一旦您建立了强大的令牌生命周期和注销策略,安全的OTA(远程)更新就变得至关重要,以便在威胁演变时维护令牌安全。OTA系统允许您快速部署安全补丁、旋转API密钥、更新证书和精细化验证逻辑——所有这些都不需要从用户那里手动更新。
使用Capacitor的开发人员,工具如Capgo提供了符合OTA的解决方案,具有端到端的加密。这确保了安全更新安全地传递到设备,同时遵守了Apple和Android的指南。这样的系统尤其适合解决紧急安全漏洞。
为了进一步增强令牌安全,监控您的应用程序和基础设施以应对新兴威胁。使用OTA系统来部署实时防御和其他先进措施,立即阻止可疑用户或设备,同时确保合法用户的服务不受影响。
令牌存储选项比较:安全性与易用性
在决定如何安全存储令牌时,所有的关注点都在于找到安全性和易用性的平衡。您的选择直接影响您的应用程序的易受攻击性以及整体用户体验。让我们分解不同存储方法的权衡。
内存存储与持久存储
内存存储 将令牌存储在应用程序内存或JavaScript变量中,使其成为一个高度安全的选项。由于令牌没有写入 持久存储攻击者使用传统的 XSS 攻击时,访问它们的机会较少。
但是,有一个陷阱:存储在内存中的令牌会在用户刷新页面或打开新标签时消失。这使得内存存储在 web 应用中不太实用,因为用户期望浏览体验的流畅性。
另一方面, 持久性存储 - 本地存储、会话存储或 cookie 等方法 - 提供了更Smooth 的体验。持久性存储的令牌允许用户关闭浏览器,稍后返回并从上次离开的地方继续使用,而无需再次登录。 [9].
然而,这种便利性伴随着安全风险。持久性存储更容易受到 XSS 攻击,恶意脚本可以从本地或会话存储中窃取令牌。 [4]Cookie 虽然提供了额外的配置选项,但如果不使用适当的标志,则也可能受到 CSRF 攻击。
使用 Capacitor 的移动应用 Web Workers 提供了一个中间地带。它们在单独的全局范围内运行,增强了安全性,同时比内存存储更好地维护了可用性。 [9]如果 Web Workers 不是可行的选项,JavaScript 闭包可以模拟私有方法来添加额外的保护层。 [9]移动开发者还需要权衡原生安全存储的利弊与自定义加密的利弊。
Keychain/Keystore vs. 自定义加密
对于移动应用程序, 平台原生安全存储 像 iOS Keychain 和 Android Keystore 这样的解决方案是金标准。这些解决方案提供了硬件背后的安全性,使得令牌提取变得更加困难。
这些原生工具的美丽之处在于它们的简单性。它们是操作系统的一部分,因此开发人员不需要编写大量的code来实现它们。另外,它们支持像 生物识别验证 和集中化凭证管理等功能,这些功能都可以提高安全性和用户便利性 [10].
自定义加密另一方面,给开发人员更多的控制权,但这伴随着重大挑战。安全性完全依赖于加密的实现质量和密钥的安全管理 [10]。许多开发人员低估了创建安全系统的复杂性,这可能会导致安全漏洞。由于加密标准不断演进,自定义解决方案需要持续的更新和维护 - 使其成为资源密集型的解决方案,除非您的团队在此领域有深入的专长
安全性与便利性比较表
| 存储方法 | 安全等级 | 易用性 | 实现复杂度 | 最佳用途 |
|---|---|---|---|---|
| 内存存储 | 高 | 低(刷新后丢失) | 低 | 高安全性,短会话 |
| 本地存储 | 低 | 高 | 低 | 仅非敏感数据 |
| 会话存储 | 中 | 高 | 低 | 临时会话数据 |
| 安全Cookie | 高(使用合适的标志) | 中 | 中 | 需要服务器支持的Web应用 |
| iOS Keychain | 极高 | 中等 | 低 | iOS原生/混合应用 |
| Android Keystore | 极高 | 中等 | 低 | Android原生/混合应用 |
| 自定义加密 | 可变 | 中等 | 高 | 特殊的安全需求 |
本表强调了平台本地存储选项,如Keychain和Keystore,提供了安全性和易于实现的强大组合,使其成为移动应用的理想选择。它们提供了强大的保护,而不需要开发人员掌握密码学。
对于Capacitor开发者来说,使用安全存储插件来访问这些本机解决方案是一个明智的决定。它结合了Keychain和Keystore的硬件背后的安全性与Capacitor提供的跨平台灵活性。
最后,您的令牌存储选择应该与您的应用的威胁模型和用户期望相一致。处理敏感数据的应用,如医疗保健或金融应用,应将安全性置于一切之上。相反,面向消费者的应用可能会接受更高的风险以提供更Smooth的用户体验。通过了解这些权衡,您可以选择最适合您的需求的存储方法。
关键 takeaway
通过安全令牌存储保护用户数据,不仅是技术最佳实践,而且是维护应用完整性的必要性。根据 2022年确认的漏洞中有81%与弱、重复或被盗的密码有关 [12],移动开发者需要优先考虑令牌安全措施。
最佳实践摘要
有效的令牌安全计划依赖于多层保护。首先使用 platform-native secure storage, such as iOS Keychain and Android Keystore, which offer hardware-backed security.
避免将令牌存储在LocalStorage或IndexedDB中 [2], as these methods are vulnerable to XSS attacks. Instead, rely on secure storage options built into the operating system, ensuring limited access. For developers using Capacitor, secure storage plugins provide a way to tap into native protections while maintaining cross-platform functionality.
使用__CAPGO_KEEP_0__的开发者可以通过安全存储插件来访问本机保护,同时保持跨平台功能。 [3]令牌生命周期管理是另一个关键方面。定期过期令牌并实现刷新令牌轮换,生成新的刷新令牌每次请求访问令牌
。较短的刷新令牌寿命可以减少在窃取的情况下滥用风险。 [1]保持签名密钥机密,仅与必要服务共享 [11]。避免不安全的做法,如记录令牌或将其嵌入URL中
。这些步骤共同加强了令牌管理策略。
开发者下一步行动
-
以下是您可以采取的措施来改善应用令牌安全的最佳实践: 如果您正在使用不安全的解决方案,如 LocalStorage,优先考虑迁移到平台本地的安全存储。对于Capacitor应用程序,采用安全存储插件以有效利用本机保护。
-
实现层次式认证。 对于低风险操作,使用更简单的方法,但要求 多因素认证(MFA)或生物识别 (MFA)或生物识别 [12]根据 Microsoft 的说法,MFA 可以阻止 99.9% 的自动化网络攻击 [12].
-
然而,考虑用户体验 - 研究表明约有三分之一的用户避免 MFA 因为它不方便 for secure and immediate rollouts. Tools like Capgo enable encrypted live updates for Capacitor apps, ensuring that security fixes reach users without compromising token safety during updates.
-
为安全和即时更新。工具,如__CAPGO_KEEP_0__,使__CAPGO_KEEP_1__应用程序能够进行加密的实时更新,从而确保安全修复能够及时到达用户,而不会在更新过程中损害令牌安全。 关注令牌生命周期管理。
-
定期过期、刷新和撤销协议至关重要。确保您的实现反映了这些原则,以限制风险。 监控认证模式。 [13]. 应该是开发过程中的常规安全审计,而不是临时考虑。
虽然移动安全不断进化,但核心原则仍然相同:使用本机安全存储,有效管理令牌生命周期,并确保加密不可动摇。随着 81% 的智能手机现在配备了生物识别 截至 2022 年 [12],开发者有了强大的工具来增强安全性和用户体验。
您的用户正在将数据托管给您 - 确保您的令牌存储实践符合最高的安全标准。
常见问题
::: faq
为什么移动开发者应该使用 iOS Keychain 和 Android Keystore 进行安全令牌存储?
使用平台本机的安全存储,例如 iOS Keychain 和 Android Keystore, plays 一个关键角色在保护移动应用程序中的敏感数据。这些工具具有 内置加密,确保令牌不会被未经授权的访问。除此之外,它们还包含 用户身份验证, 需要用户确认身份后才能访问存储的数据。这增加了一个额外的安全层。
其中一个他们突出的特点是, 不可导出的加密密钥。换句话说,这些密钥无法从设备中移除,这显著降低了它们被破坏的风险。由于这些系统旨在与其各自平台无缝集成,因此开发人员可以轻松地将它们实施,避免手动处理复杂的加密过程的麻烦。利用这些工具不仅可以增强应用程序的安全性,还可以帮助开发人员满足 现代安全标准 和遵循 行业推荐的最佳实践. :::
::: faq
在移动应用中安全管理令牌生命周期的最佳实践是什么?
在移动应用中安全管理令牌生命周期,开发人员应该坚持几个基本的实践。首先使用 短期令牌例如那些有效期为 15 分钟的令牌。这样可以最小化令牌被泄露的窗口,降低滥用令牌的风险。为了保持用户的便利性而不损害安全性,实现 refresh tokens。这些令牌允许在不强制用户重复登录的情况下重新获取令牌。
令牌的妥善存储对于防止未经授权的访问至关重要。请始终依赖平台特定的安全存储解决方案,如 Keychain (适用于 iOS)或 Android Keystore。这些解决方案专门设计用于保护敏感数据。另外,请避免将令牌硬编码或将它们存储在明文中,否则可能会暴露它们给潜在的威胁。
通过实施这些实践,开发者可以提高令牌管理在移动应用中的安全性,并保护用户免受潜在的漏洞。
:::
::: faq
在什么情况下使用自定义令牌存储加密会带来挑战,何时应该优先考虑本机解决方案?
说到这一点,有些情况下自定义加密是不可避免的 - 比如你处理的数据非常敏感或者试图满足那些标准工具无法满足的严格法规要求。在这些情况下,开发者必须严格遵循 最佳实践 以确保他们的 加密方法 不仅安全可靠,还符合行业标准。仔细考虑自定义加密方法的权衡之前不要深入其中。 :::
继续阅读 Secure Token Storage: Mobile 开发者最佳实践
如果你正在使用 Secure Token Storage: Mobile 开发者最佳实践 来规划安全性和合规性,连接它到 加密 来实现加密的细节 合规 为 Compliance 的实现细节 Capgo 安全扫描器 为产品工作流程在 Capgo 安全扫描器中 Capgo 安全 为产品工作流程在 Capgo 安全中 Capgo 信任中心 为产品工作流程在 Capgo 信任中心中