安全存储令牌对于移动应用程序安全至关重要。令牌是用户帐户、敏感数据和服务的钥匙。如果被破坏,它们可以导致 身份盗窃、金融欺诈和数据泄露。以下是如何保护它们的方法:
关键要点:
- 使用平台原生安全存储: 在 iOS Keychain 或 Android Keystore 中存储令牌以获得硬件背后的安全性。
- 在休眠时加密令牌: 使用工具如
EncryptedSharedPreferences(Android) 或CryptoKit(iOS) 进行安全加密。 - 限制令牌暴露使用短期令牌和令牌刷新轮换来降低风险。
- 安全通信始终使用HTTPS并实施证书固定以防止拦截.
- 令牌生命周期管理定期过期、刷新和撤销令牌以最小化盗窃造成的损害.
快速存储方法比较:
| 存储方法 | 安全性 | 易用性 | 最佳使用场景 |
|---|---|---|---|
| 内存存储 | 高 | 低 | 短会话,高安全需求 |
| 本地存储 | 低 | 高 | 非敏感数据 |
| 安全Cookie | 高 | 中 | Web应用程序与服务器端控件 |
| iOS钥匙串 | 极高 | 中等 | iOS应用程序存储敏感令牌 |
| Android Keystore | 极高 | 中等 | Android应用程序需要安全存储 |
| 自定义加密 | 变量 | 中等 | 特殊的安全要求 |
首先审计您的应用程序当前令牌存储方法,并实施这些最佳实践来保护您的用户和您的品牌。
移动设备上的安全存储现实 - Daniel Mayer & Drew Suarez
安全令牌存储的基本规则
保护令牌需要多层次的安全措施。通过结合多个安全手段,确保如果一个措施失败,其他措施仍然保护敏感数据。对于 Capacitor 应用程序,遵循这些最佳实践至关重要,以在多个平台上维护令牌安全。
使用 HTTPS 和证书固定
HTTPS 加密是令牌拦截的第一道防线。每次应用程序与服务器之间的交互都必须使用 HTTPS 来加密数据传输,防止攻击者窃取数据。
为了进一步加强这一点,实施 证书固定。对于 Capacitor 应用程序, @capgo/capacitor-ssl-pinning 固定 HTTPS 连接到 iOS 和 Android 上的 CapacitorHttp 的捆绑证书。这一技术确保应用程序始终与您信任的服务器通信,即使有人尝试使用伪造的证书。通过在应用程序中硬编码服务器的证书或公钥,您建立了应用程序和服务器之间的直接信任关系。
“在不确定远程主机身份的情况下或在恶意环境中操作时,您应该固定。由于这两种情况几乎总是成立,因此您应该尽可能多地固定。” – OWASP 固定指南 [5]
A real-world example: Twitter introduced certificate pinning in its mobile apps after experiencing Man-in-the-Middle (MitM) attacks. Their team embedded the server’s SSL certificate public key directly into the app. When users connected, the app verified the certificate against the pinned one. If there was no match, the connection was terminated immediately. This approach significantly reduced MitM attacks and boosted user confidence in the platform [5].
You can choose between 证书固定(certificate pinning) (验证整个证书) 以获得最高安全性或 公钥固定(public key pinning) (仅验证公钥) 以便在证书续期时具有更大的灵活性 工具如 OkHttp 用于 Android 和 Alamofire [5].
用于 iOS 简化了这些技术的实现
一旦安全传输建立,下一步就是最小化令牌暴露。
减少令牌暴露的风险涉及限制令牌的范围和有效期。这个想法很简单:令牌的有效期越短,权限越少,令牌被破坏的风险就越低。
- 使用 短期令牌 ,令牌有效期以分钟为单位。将它们与刷新令牌配对,以保持用户会话而不在设备上保留长期令牌。这一方法确保盗窃的令牌迅速变得无用。
- 应用 最小特权原则。例如,如果令牌只需要读取用户资料数据,不要授予它修改账户设置或访问付款细节的权限。
- 启用 刷新令牌轮换,每次使用刷新令牌请求新访问令牌时都会发行一个新的刷新令牌。如果刷新令牌被盗,等待合法应用使用它后,它就会失效,从而缩短风险窗口。 [4].
通过限制令牌暴露,减少了由于违约造成的重大损害的机会。接下来,确保令牌即使设备物理上被破坏也保持安全。
在令牌休眠时加密令牌
__CAPGO_KEEP_0__ 设备上的令牌存储受到加密保护。即使设备丢失、被盗或被恶意软件渗透,数据仍保持不可读状态。
现代移动操作系统提供了安全、硬件支持的存储选项,这比标准方法如Android的SharedPreferences或iOS的NSUserDefaults要可靠得多 [4].
- 对于Android: 使用
EncryptedSharedPreferences(可用于Android 10及后续版本)SecureJWTStorage此工具会自动处理加密和密钥管理,简化了实现并提高了安全性。例如,EncryptedSharedPreferenceswithout requiring complex custom encryption code. - 安全地存储和检索JWT令牌,而无需进行复杂的自定义加密。对于iOS
KeychainHelper: Keychain提供了硬件级别的加密,用于安全存储令牌。开发者可以使用 类管理JWT令牌或通过使用CryptoKit加密令牌来添加额外的安全层 在存储它们之前将它们存储在Keychain中 [4].
两者都使用硬件加密,例如iOS中的Secure Enclave和Android中的Hardware Security Module。这些组件将加密密钥存储在抗篡改硬件中,隔离在主操作系统之外。
最后,建立明确的数据保留政策。自动删除过期令牌并在设备不再需要时安全地从设备中删除敏感数据。这些实践确保令牌只存储在绝对必要的时间内 [6].
平台特定的令牌存储方法
每个移动平台都提供自己的工具来保护令牌,旨在满足安全和用户体验的需求。这些本地选项基于核心实践,如HTTPS、加密和限制暴露,这些实践在早些时候讨论过。
Android:Keystore和 EncryptedSharedPreferences

Android设备通过Keystore系统和EncryptedSharedPreferences提供了强大的令牌保护功能 Keystore系统 和 EncryptedSharedPreferences. Keystore安全存储加密密钥在受保护的环境中,使其难以提取并确保其保持不可导出。 这意味着密钥只能用于安全操作。 此外,您还可以添加限制,如要求用户身份验证。 对于运行Android 9(API级别28)或更高版本的设备, StrongBox KeyMint 提供了比标准信任执行环境(TEE)更大的隔离。 要检查是否可用,请使用 FEATURE_STRONGBOX_KEYSTORE,并使用 KeyGenParameterSpec.Builder.setIsStrongBoxBacked().
EncryptedSharedPreferences offers a simpler way to securely store key–value pairs. It encrypts data and securely manages keys, supporting API levels 23 and above. Arun, an Android Engineer, highlights its ease of use:
EncryptedSharedPreferences提供了一个更简单的方式来安全存储键值对。 它会加密数据并安全地管理密钥,支持code级别23及以上。 Android工程师Arun突出了其易用性: “只需几行__CAPGO_KEEP_0__,我们就可以 显著提高安全性
EncryptedSharedPreferences通过使用
。 它是一个强大且易于使用的解决方案,用于在Android应用中安全存储敏感数据。”
为了最佳实践,实现错误处理,90-180天内轮换密钥,并避免在SharedPreferences中存储高度敏感数据(如信用卡号码)。 这些数据应在安全后端处理而不是在SharedPreferences中处理。 iOS:Keychain和
iOS中,令牌安全性依赖于 Keychain 和 Secure Enclave。 Keychain 是一种使用 AES-256-GCM 加密的安全存储库,用于敏感数据,如密码和令牌。它采用双密钥系统:元数据密钥由 Secure Enclave 保护,元数据密钥用于每个存储项的独特密钥。元数据密钥由 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-数据存储-SQLite 本地存储数据使用 SQLite 和可选的加密。 @capgo/capacitor-持久账户 在 iOS 中,插件将数据存储在加密的系统 Keychain 中,而在 Android 中,插件使用 Android Keystore 生成的密钥对数据进行 AES-GCM 加密后再将其保存在 SharedPreferences 中。对于 web 环境,插件使用未加密的 localStorage - 只用于调试目的。
在 2025 年 2 月,martinkasa 更新了 capacitor-secure-storage-plugin 以支持 Capacitor v7,确保了 iOS 和 Android 平台上字符串值的安全存储。这些插件适合用于存储登录凭证和 JSON 数据。然而,它们可能缺乏原生解决方案提供的细粒度控制。对于具有高级安全需求的企业级应用,原生选项如 iOS Keychain Services 和 Android Keystore APIs - 或增强的工具如 IONIC在Capacitor的官方文档中建议使用本地安全存储来存储敏感数据,如加密密钥或会话令牌。使用本地安全存储可能更适合。
当部署实时更新的Capacitor应用时,服务如 Capgo Capgo的端到端加密确保了更新 - 包括包含安全补丁或令牌管理改进的更新 - 将安全地传递,维护了应用程序安全框架的完整性。
令牌生命周期和安全管理
有效管理令牌涉及监督其创建、过期和撤销。开发者需要设计系统,以平衡强大的安全措施和流畅的用户体验。以下,我们深入探讨令牌过期、撤销和安全的OTA(即时更新)策略,以帮助您构建全面令牌管理方法。
令牌过期和刷新方法
使用短暂的访问令牌和长期的刷新令牌是安全令牌处理的关键实践。访问令牌应在5-15分钟内过期,以减少被破坏的风险。另一方面,刷新令牌可以保持几天或几周的有效期,允许用户保持会话而不需要频繁重新验证。
令牌过期在保持API安全和高效方面起着至关重要的作用 [7].将令牌旋转(先前发行的令牌被invalidate)与之配对,添加了额外的保护层。这种方法可以最小化因刷新令牌被破坏而造成的损害,并且还可以帮助识别可疑活动,例如旧令牌的重用。
在设计刷新机制时,确保令牌在刷新过程中严格验证。使用速率限制来防止暴力攻击,并使用自动监控来检测异常,例如同一时间来自多个位置的刷新请求。平衡安全性和性能是保护用户会话而不影响整体体验的关键。
注销和invalidating 令牌
虽然令牌过期是至关重要的,但令牌注销提供了另一个安全层,尤其是在用户注销、丢失设备或suspected 安全漏洞等场景中。虽然无状态JWT访问令牌在到期前保持有效,但有效管理刷新令牌可以阻止新访问令牌的发行。
立即注销令牌可以防止未经授权的访问敏感资源 [8]为了立即invalidating 令牌,考虑在API请求期间实施一个服务器端黑名单来跟踪注销令牌并在请求期间检查它们。此外,单点注销(SLO)功能允许用户在一个操作中终止多个身份验证会话,确保所有相关的刷新令牌在连接的服务中都被注销。
在处理被破坏的令牌时,也很重要。这些协议应该包括立即令牌注销、自动安全警报、及时通知受影响用户以及终止与被破坏令牌相关的所有活动会话。
使用OTA系统进行安全令牌更新
当您建立了强大的令牌生命周期和注销策略后,维持令牌安全性随着威胁的演变而变得至关重要。 OTA(即时更新)系统使您能够快速部署安全补丁、旋转 API 密钥、更新证书和精细化验证逻辑 - 所有这些都不需要用户手动更新。
使用 Capacitor 的开发人员可以使用 Capgo 等工具来获得符合 OTA 的安全解决方案,具有端到端加密。 这样可以确保安全更新安全地传递到设备,同时遵守苹果和安卓的指南。 这些系统尤其适合解决紧急安全漏洞。
为了进一步增强令牌安全性,监控您的应用程序和基础设施以应对新兴威胁。 使用 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应用程序 |
| __CAPGO_KEEP_0__ | 非常高 | 中等 | 低 | __CAPGO_KEEP_1__ |
| __CAPGO_KEEP_2__ | 非常高 | 中等 | 低 | __CAPGO_KEEP_3__ |
| 自定义加密 | 可变 | medium | high | 专属安全需求 |
本表强调了平台原生存储选项,如Keychain和Keystore,提供了安全性和易于实现的强大组合,使其成为移动应用的理想选择。它们提供了强大的保护,而不需要开发者掌握加密学知识。
对于Capacitor开发者来说,使用安全存储插件来访问这些原生解决方案是一个明智的决定。它结合了Keychain和Keystore的硬件背后的安全性与Capacitor提供的跨平台灵活性。
最终,您的令牌存储选择应与您的应用的威胁模型和用户期望相一致。处理敏感数据的应用,如医疗保健或金融应用,应将安全性置于一切之上。相反,面向消费者的应用可能会接受更高的风险以提供更Smooth的用户体验。通过了解这些权衡,您可以选择最适合您的需求的存储方法。
关键要点
通过安全令牌存储来保护用户数据,不仅是技术最佳实践,而且是维护应用完整性的必要性。根据 2022年确认的漏洞中有81%与弱、重复使用或盗用的密码有关 [12],移动开发者需要优先考虑强大的令牌安全措施。
最佳实践摘要
有效的令牌安全计划依赖于多层保护。首先使用 platform-native secure storage, such as iOS Keychain and Android Keystore, which offer hardware-backed security.
Avoid storing tokens in LocalStorage or 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.
Token lifecycle management is another critical aspect. Regularly expire tokens and implement refresh token rotation, generating a new refresh token each time an access token is requested [3]For developers using __CAPGO_KEEP_0__, secure storage plugins provide a way to tap into native protections while maintaining cross-platform functionality.
Token lifecycle management is another critical aspect. Regularly expire tokens and implement refresh token rotation, generating a new refresh token each time an access token is requested [1]. Avoid insecure practices like logging tokens or embedding them in URLs [11]Keep signing keys confidential, sharing them only with essential services
Next Steps for Developers
These steps collectively strengthen your token management strategy.
-
Next Steps for Developers: How to Improve Your App’s Token Security: Audit your token storage methods. 如果您正在使用不安全的解决方案,如 LocalStorage,优先考虑迁移到平台本地的安全存储。对于Capacitor应用程序,采用安全存储插件以有效利用本机保护功能。
-
实现层次式认证。 对于低风险操作使用简单的方法,但要求 多因素认证(MFA)或生物识别 (MFA)或生物识别 [12](MFA)或生物识别 [12].
-
根据 Microsoft 的说法,MFA 可以阻止 99.9% 的自动化网络攻击 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.
-
使用 OTA(即时更新)系统 为安全和即时的发布。工具,如__CAPGO_KEEP_0__,使__CAPGO_KEEP_1__应用程序能够进行加密的实时更新,确保安全修复可以安全地到达用户,而不会在更新期间损害令牌安全。
-
关注令牌生命周期管理。 定期过期、刷新和注销协议至关重要。确保您的实现反映了这些原则,以限制风险。 [13]. 应该将安全审计纳入开发流程,而不是临时处理.
虽然移动安全不断演进,但核心原则仍然相同:使用本机安全存储、有效管理令牌生命周期,并确保加密不可动摇。 截至 2022 年,81% 的智能手机已配备了生物识别功能 开发者现在有了强大的工具来增强安全性和用户体验. [12]您的用户正在将数据托管给您——确保令牌存储实践符合最高安全标准.
常见问题
::: faq
为什么移动开发者应该使用 iOS Keychain 和 Android Keystore 进行安全令牌存储?
使用本机安全存储,例如 iOS Keychain 和 Android Keystore, plays 在保护移动应用程序中的敏感数据方面起着至关重要的作用。这些工具具有
内置加密 ,确保令牌免受未经授权访问的威胁。除此之外,它们还包含了其他功能。Why should mobile developers use iOS Keychain and Android Keystore for secure token storage? Why is it important to use platform-native secure storage? What are the benefits of using iOS Keychain and Android Keystore? 用户身份验证, 需要用户确认身份后才能访问存储的数据。这增加了安全性。
其中一个突出的功能是加密密钥是 不可导出。换句话说,这些密钥无法从设备中移除,这显著降低了它们被破坏的风险。由于这些系统旨在与其各自平台无缝集成,开发人员可以轻松地将它们实施,从而避免手动处理复杂的加密过程的麻烦。利用这些工具不仅可以增强应用程序的安全性,还可以帮助开发人员符合 现代安全标准 和遵循 行业推荐的最佳实践. :::
::: faq
什么是安全管理令牌生命周期的最佳实践?
在移动应用程序中安全地管理令牌生命周期,开发人员应该坚持几个基本的实践。首先使用 短期令牌例如那些有效期为 15 分钟的令牌。这样可以最小化令牌被泄露的窗口,降低滥用令牌的机会。为了保持用户的便利性而不损害安全性,实现 refresh tokens。这些令牌允许在不迫使用户重复登录的情况下重新获取令牌。
令牌的妥善存储对于防止未经授权的访问至关重要。请始终依赖平台特定的安全存储解决方案,如 Keychain (适用于 iOS)或 Android Keystore。这些解决方案专门设计用于保护敏感数据。请避免将令牌硬编码或将它们存储在应用程序的明文中,因为这可能会使它们暴露于潜在威胁中。
通过采用这些实践,开发者可以增强移动应用程序令牌管理的安全性,并保护用户免受潜在的漏洞。
:::
::: faq
在什么情况下使用自定义令牌存储加密会带来挑战,何时应该优先考虑本机解决方案?
That said, there are situations where custom encryption becomes unavoidable - like when you’re dealing with extremely sensitive data or trying to meet strict regulatory requirements that standard tools just can’t handle. In these cases, it’s crucial for developers to stick to 最佳实践 以确保他们的 加密方法 不仅安全而且可靠且符合行业标准。 在选择自定义加密方法之前,务必要考虑各个方面。 :::
继续阅读 Secure Token Storage: Mobile 开发者最佳实践
如果您正在使用 Secure Token Storage: Mobile 开发者最佳实践 来规划安全性和合规性,连接它与 加密 以实现加密的详细信息, 合规 关于 Compliance 的实现细节 Capgo 安全扫描器 关于 Capgo 安全扫描器 的产品工作流程 Capgo 安全 关于 Capgo 安全 的产品工作流程 Capgo 信任中心 关于 Capgo 信任中心 的产品工作流程