モバイルアプリのセキュリティにとって、認証トークンの安全なストレージは非常に重要です。トークンはユーザーアカウント、敏感データ、サービスへのアクセスキーです。漏洩すると、身元盗用、金銭的詐欺、データ漏洩につながる可能性があります。 トークンは、ユーザーアカウント、敏感データ、サービスへのアクセスキーです。漏洩すると、身元盗用、金銭的詐欺、データ漏洩につながる可能性があります。トークンを保護する方法については、以下のとおりです。
主なポイント:
- プラットフォームネイティブのセキュアストレージを使用する: iOSのKeychainまたはAndroidのKeystoreでハードウェアバックアップされたセキュリティを実現するために、トークンをストレージする。
- リストレスト時のトークンの暗号化: Androidの場合、またはiOSの場合、セキュアな暗号化を実現するためにツールを使用する。
EncryptedSharedPreferencesトークンへの露出を制限するCryptoKit(Android) - (iOS): 短期トークンとトークン更新の回転を使用してリスクを軽減します。
- セキュアなコミュニケーション: HTTPSを常に使用し、証明書ピンニングを実装してインターセプトを防ぎます。
- トークンライフサイクルの管理: 盗難から被害を最小限に抑えるために、定期的にトークンを期限切れにし、更新し、削除します。
ストレージ方法の比較:
| ストレージ方法 | セキュリティレベル | 使いやすさ | 最適な使用ケース |
|---|---|---|---|
| メモリ内ストレージ | 高 | Low | 短いセッション、高いセキュリティの必要性 |
| ローカル ストレージ | Low | High | 非機密データ |
| セキュア クッキー | High | Medium | サーバー側の制御を持つWebアプリ |
| iOS キーチェーン | 非常に高い | Medium | iOSアプリにおける機密情報の保存 |
| Android Keystore | 非常に高い | Medium | Androidアプリの安全なデータストレージの必要性 |
| カスタム暗号化 | 変数 | Medium | 高度なセキュリティ要件 |
まず、アプリの現在のトークン保存方法を検証し、ユーザーとブランドを保護するためにこれらのベストプラクティスを実装してください。
Faux Disk Encryption Mobile デバイスにおける安全なデータストレージの現実 - Daniel Mayer & Drew Suarez
セキュアなトークンストレージの基本ルール
トークンの保護には、複数のセキュリティ対策を組み合わせることで、1 つの対策が失敗しても、他の対策が敏感なデータを保護するようにする必要があります。Capacitor アプリでは、プラットフォームを横断してトークンセキュリティを維持するために、これらの慣行を遵守することが不可欠です。
HTTPSと証明書ピンニングの使用
HTTPS暗号化は、トークンの盗難から保護する最初の防御線です。アプリとサーバー間のすべてのインタラクションで、HTTPSを使用してデータを転送することで、攻撃者への露出を防ぎます。
このセキュリティを強化するために、実装する必要があるのは 証明書ピンニングです。Capacitor アプリでは、@Capacitor/__CAPGO_KEEP_1__-ssl-pinning @capgo/capacitor-SSLピン留め 「あなたは、リモートホストのアイデンティティを確実に知りたい場合や、ホスト環境が危険な場合にピンするべきです。どちらもほぼ常に真実です。したがって、常にピンするべきです」というOWASPピンニングチートシートの言葉に言及しています。
YouTube動画再生プレイヤー [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].
セキュアなトークンストレージのベストプラクティスを実践するには、以下の選択肢があります 証明書ピンニング (完全な証明書の検証)で最大のセキュリティを実現するか 公開鍵ピンニング (公開鍵のみの検証)で証明書の更新時に柔軟性を実現する OkHttp OkHttp iOS向けの Alamofire [5].
を使用して、これらのテクニックを実装することができます
セキュアなトランスミッションが確立されたら、次のステップはトークンの露出を最小限に抑えることです
トークン漏洩を防ぐには、トークンのスコープと有効期間を制限する必要があります。考え方は単純です: トークンが有効な時間が短く、許可された権限が少ないほど、トークンが漏洩された場合のリスクが低くなります。
- 使用 短期間のアクセストークン 有効期限が分単位で測定される
- 使い方を適用する 最小権限原則を適用します。例えば、ユーザープロファイルデータを読み取るトークンだけに必要な場合、会計設定を変更したり、支払い情報にアクセスしたりする権限を付与しないようにします。
- 有効 リフレッシュトークンを回転させる新しいアクセストークンを要求するたびに新しいリフレッシュトークンが発行されるようにします。リフレッシュトークンが盗まれた場合、正当なアプリが使用した後、無効になります。 [4].
トークン漏洩を防ぐことで、重大な被害から逃れる可能性が減ります。次に、暗号化により、物理的に侵害されたデバイスでもトークンが安全に保たれます。
リストア中のトークンを暗号化する
暗号化 デバイスに保存されているトークンを保護する
デバイスが紛失、盗難、またはマルウェアによって侵害された場合でも、暗号化によりトークンは読み取れません。 [4].
- Android用Androidの場合
EncryptedSharedPreferences:SecureJWTStorageAndroid 10以降で利用可能です。このツールは暗号化とキー管理を自動的に処理し、実装を簡素化し、セキュリティを向上させます。たとえば、EncryptedSharedPreferenceswithout requiring complex custom encryption code. - iOSの場合:
KeychainHelperKeychainは、ハードウェアレベルで暗号化された安全なトークンストレージを提供します。開発者は CryptoKit Keychainに格納する前にそれらを保存する [4].
AndroidとiOSは、iOSのSecure EnclaveやAndroidのHardware Security Moduleなどのハードウェアバックエンドの暗号化を活用しています。これらのコンポーネントは、主なオペレーティングシステムから隔離された、暗号化キーを安全に保存するためのタンパー耐性ハードウェアを使用しています。
最後に、明確なデータ保持ポリシーを確立してください。有効期限切れのトークンを自動的に削除し、必要なくなったときにデバイスから安全に削除するようにしてください。これらの慣行により、トークンは絶対に必要な限りだけ保存されます。 [6].
プラットフォーム固有のトークン保存方法
各モバイルプラットフォームは、セキュリティとユーザー体験の両方を満たすために設計された、独自のツールを提供しています。これらのネイティブオプションは、HTTPS、暗号化、露出を制限するなどの基本的な慣行に基づいています。これらは、前述のものと同じです。
Android: Keystoreと EncryptedSharedPreferences

Androidデバイスは、KeystoreシステムとEncryptedSharedPreferencesを使用して、強力なトークン保護を提供しています。 Keystoreシステム と EncryptedSharedPreferences。Keystoreは、保護された環境内で暗号化キーを安全に保存し、キーを抽出することを困難にし、キーを非エクスポート可能にします。これにより、キーは安全な操作のみに使用できます。さらに、ユーザー認証を必要とする制限を追加できます。Android 9 (API 28レベル)以降のデバイスを実行中 強化ストレージ StrongBox KeyMint 標準のTrusted Execution Environment (TEE)よりも、より高い隔離度を提供します。StrongBoxが利用可能かどうかを確認するには FEATURE_STRONGBOX_KEYSTORE、を使用して有効にします。EncryptedSharedPreferencesは、暗号化されたデータを暗号化し、キーを安全に管理することで、キー–値ペアを安全に保存する簡単な方法を提供します。__CAPGO_KEEP_0__レベル23以上をサポートします。Arunは、Androidエンジニアとして、以下のように述べています: KeyGenParameterSpec.Builder.setIsStrongBoxBacked().
“わずか数行のAPIで、
「わずか数行のcodeで」 を大幅に改善できます。強力で使いやすいセキュリティソリューションです。” by using
EncryptedSharedPreferencesiOS: Keychainと
Secure Enclave
iOS: KeychainとSecure Enclave iOS: KeychainとSecure Enclave
iOS上でのトークンセキュリティは、 キーシャロー と Secure Enclave. Keychainは、パスワードやトークンなどの敏感データを安全に保存するためのセキュアなリポジトリです。 AES-256-GCM暗号化を使用して、敏感データを保護します。 Keychainは、メタデータと各保存アイテムごとに一意のキーを使用するデュアルキー方式を採用しています。 メタデータキーは、Secure Enclaveによって保護され、高速な検索のためにキャッシュされます。 ただし、秘密キーは、追加のセキュリティのためにEnclaveに一回の往復が必要です。 Keychainは、同一開発者から同様のアプリ間でアイテムを安全に共有することもサポートしています。 これは、開発者によって管理される } securityd デーモン。
セキュア・エンクラーブはP256キーと約4MBのセキュアストレージを使用して保護を強化します。さらにセキュリティを強化するには、設定のFace ID、Touch ID、またはパスコード認証を必要とするAccess Control Lists(ACL)を構成することができます。 kSecAttrAccessibleWhenUnlocked. さらに厳格なセキュリティのために、 .whenPasscodeSetThisDeviceOnly デバイスに紐づけられたデータは、不正アクセスのリスクを低減します。デバイスロックアウトやリセットなどのエッジケースを考慮し、定期的にアプリの特権と許可を検証してください。
Capacitor: セキュア ストレージ プラグイン

クロスプラットフォームアプリ用に、Capacitorはセキュアなストレージプラグインを提供しています。これにより、プラットフォーム固有のcodeを必要とせずにトークンセキュリティを簡素化できます。 @capgo/capacitor-データストレージ(SQLite) データはローカルにSQLiteで保存し、オプションで暗号化されます。 @capgo/capacitor-パーシスティントアカウント 再インストールしても認証データを保存します。iOSでは、データは暗号化されたシステムキーチェーンに保存され、AndroidではAES-GCMモードで暗号化され、Android Keystoreによって生成されたキーを使用してSharedPreferencesに保存されます。ウェブ環境では、デバッグ用途のみで暗号化されません。 localStorage - デバッグ用途のみに限ります。
In February 2025, martinkasa updated the capacitor-secure-storage-plugin to support Capacitor v7, ensuring secure storage of string values across iOS and Android. These plugins are ideal for storing login credentials and JSON data. However, they may lack the granular control offered by native solutions. For enterprise-level apps with advanced security needs, native options like iOS Keychain Services and Android Keystore APIs - or enhanced tools like IonicCapacitor
Capacitor Capgo can further bolster token security. Capgo’s end-to-end encryption ensures that updates - including those containing security patches or token management improvements - are delivered securely, maintaining the integrity of your app’s security framework.
トークン管理のセキュリティ
トークン管理の重要性
トークン有効期限とリフレッシュ方法
短期間のアクセストークンと長期間のリフレッシュトークン
トークン有効期限の重要性 [7]APIのセキュリティと効率
リフレッシュメカニズムを設計する際は、トークンをリフレッシュプロセス中に厳密に検証することを保証し、強制攻撃から守るためにレート制限を実施し、リフレッシュ要求が同時に複数の場所から発生する異常を自動監視して検出する。セキュリティとパフォーマンスのバランスを取ることが、ユーザーセッションを保護するために総合的なエクスペリエンスに影響を与えずに不可欠です。
トークンの削除と無効化
トークン有効期限は重要ですが、特にユーザーログアウト、紛失デバイス、または疑わしいセキュリティ侵害シナリオでは、トークンの削除がセキュリティの別の層を追加します。ステートレスJWTアクセストークンは有効期限まで有効ですが、リフレッシュトークンの効果的な管理によって新しいアクセストークンの発行をブロックできます。
トークンの即時削除は、機密情報への不正アクセスを防ぎます。 [8]. API リクエストの際に削除されたトークンを追跡し、検証するサーバーサイドブラックリストを実装することで、トークンを即時無効化できます。さらに、Single Logout (SLO) 機能は、ユーザーが複数の認証セッションを 1 つのアクションで終了できるようにし、関連するサービス間のすべてのリフレッシュトークンを削除します。
トークンが不正確になっている場合には、即時のトークン削除、自動セキュリティアラート、影響を受けたユーザーへの迅速な通知、トークンに紐付けられたすべてのアクティブセッションの終了を含む、明確なプロトコルを用意することも重要です。
OTA システムを用いたセキュアなトークン更新
脆弱性が進化するにつれて、トークンの安全性を維持するために、セキュアなオーバー・ザ・エア(OTA)アップデートは不可欠になります。OTAシステムは、迅速にセキュリティパッチを展開し、API キーを回転する、証明書を更新し、検証ロジックを改良することができます。これらの作業は、ユーザーからの手動アップデートを必要とせずに実行できます。
For developers using Capacitor, tools like Capgo provide a compliant OTA solution with end-to-end encryption. This ensures that security updates are delivered safely to devices while adhering to Apple and Android guidelines. Such systems are particularly useful for addressing urgent security vulnerabilities.
トークンの安全性をさらに高めるには、エッジで脅威を監視し、実行中の防御やその他の高度な対策を展開して、不審なユーザーやデバイスを即座にブロックすることができます。ただし、正当なユーザーにサービスを提供することを保証しながら実行する必要があります。
トークンストレージの比較:セキュリティ対ユーザー体験
トークンを安全に保存する方法を決定する際は、セキュリティとユーザー体験のバランスを取ることが重要です。選択した方法は、攻撃に脆弱なアプリの脆弱性と、ユーザー体験に影響を与える可能性があります。ここでは、異なる保存方法のトレードオフを分析します。
メモリ内ストレージ対持続的ストレージ
メモリ内ストレージ アプリケーションメモリまたはJavaScript変数にトークンを保持するため、メモリ内ストレージは非常に安全なオプションです。トークンは持続的ストレージに書き込まれません。 __CAPGO_KEEP_0__、攻撃者が従来の XSS 攻撃を使用してアクセスする機会が少なくなります。
しかし、そこには一つの条件があります: メモリ内に保存されたトークンは、ユーザーがページをリフレッシュしたり、新しいタブを開いたりすると消えます。これにより、ユーザーがシームレスなブラウジング エクスペリエンスを期待するウェブ アプリでは、メモリ内ストレージは実用的ではありません。
一方で 持続的ストレージ 持続的ストレージの方法、例えばローカル ストレージ、セッション ストレージ、またはクッキー - により、ユーザーはブラウザーを閉じて、後で戻り、そこから再開することができます。トークンが持続的に保存されると、ユーザーは再度ログインする必要がなくなります。 [9].
しかし、この利便性はセキュリティ上のリスクとともに来ます。持続的ストレージは、ローカルまたはセッション ストレージからトークンを盗むXSS攻撃に脆弱です。 [4]クッキーは、適切なフラグで保護されていない場合、CSRF攻撃も対象となります。
モバイル アプリケーションでCapacitorを使用している場合 Webワーカー 別のグローバル スコープで実行されるため、セキュリティを向上させながら、ユーザビリティを維持することができます。メモリ内ストレージよりも [9]Webワーカーがオプションではない場合、JavaScript クロージャーはプライベート メソッドをシミュレートして追加の保護層を追加できます。 [9]モバイル デベロッパーは、ネイティブ セキュア ストレージとカスタム エンコードの利点と欠点を比較検討する必要があります。
Keychain/Keystore とカスタム暗号化
モバイルアプリケーション向け プラットフォームネイティブの安全なストレージ iOS KeychainやAndroid Keystoreなどのプラットフォームネイティブの安全なストレージは、ハードウェアバックのセキュリティを提供し、トークンの抽出を困難にします。
The beauty of these native tools lies in their simplicity. They’re built into the operating systems, so developers don’t have to write extensive code to implement them. Plus, they support features like 指紋認証 と集中されたクレデンシャル管理をサポートしていることが挙げられる。これにより、セキュリティとユーザーの便利さが向上します。 [10].
カスタム暗号化は開発者に制御の余地を与えるものの、重大な課題も伴います。セキュリティは暗号化の実装とキー管理のセキュリティに依存しており、多くの開発者が安全なシステムを作成する複雑さを過小評価していることが多い [10]これにより、脆弱性が生じる可能性があります。加えて、暗号化の標準が進化するため、カスタムソリューションには継続的な更新とメンテナンスが必要であり、リソースを多く消費します。ただし、チームがこの分野で深い専門知識を持っている場合、リソースを効率的に消費できます。
セキュリティ対ユーザー性比較表
| 保存方法 | セキュリティレベル | 使いやすさ | 実装の複雑さ | ベストケース |
|---|---|---|---|---|
| メモリ内ストレージ | 高 | リフレッシュ時に失われる (低) | 低 | 高セキュリティ、短いセッション |
| ローカルストレージ | 低 | 高 | 低 | 非機密データのみ |
| セッション ストレージ | 中 | 高 | 低 | 一時的なセッション データ |
| セキュア クッキー | 高 (適切なフラグとともに) | 中 | 中 | ウェブ アプリケーション (サーバー サポートあり) |
| iOS Keychain | 非常に高い | 中 | 低 | iOSネイティブ/ハイブリッドアプリ |
| Android Keystore | 非常に高い | 中 | 低 | Androidネイティブ/ハイブリッドアプリ |
| カスタム暗号化 | 変数 | Medium | High | 特殊セキュリティ要件 |
この表は、プラットフォームネイティブのストレージオプションであるKeychainとKeystoreの強力なセキュリティと実装の容易さの組み合わせを強調しています。これにより、開発者が暗号学をマスターする必要なく、強力な保護が提供されます。
For Capacitor developers, using secure storage plugins to access these native solutions is a smart move. It combines the hardware-backed security of Keychain and Keystore with the cross-platform flexibility that Capacitor offers.
最終的には、トークンストレージの選択は、ユーザーの期待とアプリの脅威モデルに合わせる必要があります。敏感なデータを扱うアプリケーション、例えば医療または金融アプリケーションは、セキュリティを優先する必要があります。一方、消費者向けアプリケーションでは、ユーザー体験を改善するために、リスクを高く設定することができます。こうしたトレードオフを理解することで、必要なストレージ方法を選択できます。
Key Takeaways
ユーザーデータを保護するための安全なトークンストレージは、技術上のベストプラクティスだけではなく、アプリの完整性を維持する必要性です。2022年の確認された侵害の81%は、弱い、再利用された、または盗まれたパスワードに起因しています。 Best Practices Summary [12]効果的なトークンセキュリティ計画は、複数の保護層に依存します。まず、
81%の2022年の確認された侵害は弱い、再利用された、または盗まれたパスワードに起因しています。
81%の2022年の確認された侵害は弱い、再利用された、または盗まれたパスワードに起因しています。 プラットフォーム固有のセキュアストレージ例えば、iOS KeychainやAndroid Keystoreなど、ハードウェアバックのセキュリティを提供するストレージを使用することが推奨されます。
LocalStorageやIndexedDBにトークンを保存しないようにしましょう。 [2]これらの方法はXSS攻撃に脆弱です。代わりに、オペレーティングシステムに組み込まれたセキュアストレージオプションを使用し、制限されたアクセスを確保することによって、開発者はCapacitorを使用することで、ネイティブの保護を利用しながらクロスプラットフォームの機能性を維持できます。
トークンライフサイクル管理はもう一つの重要な側面です。トークンを定期的に期限切れにし、リフレッシュトークンを回転させ、リフレッシュトークンを生成するたびにアクセストークンを要求するたびに新しいリフレッシュトークンを生成することによって、トークン管理戦略を強化します。 [3]リフレッシュトークンの有効期間を短くすると、盗難の場合の不正使用のリスクが減ります。
署名キーを機密に保管し、必須サービスにのみ共有するようにしましょう。 [1]トークンをログに記録したり、URLに埋め込んだりしないようにしましょう。 [11]これらのステップを組み合わせると、トークン管理戦略を強化できます。
開発者向けの次のステップ
これらのベストプラクティスを実装することで、トークンセキュリティを強化することができます。
-
トークンストレージ方法を検証する Local Storage を使用している場合は、プラットフォーム固有のセキュア ストレージに移行することを優先してください。 Capacitor アプリでは、セキュア ストレージ プラグインを採用して、ネイティブの保護機能を有効にします。
-
層化された認証を実装します。 低リスクのアクションでは、より単純な方法を使用してくださいが、安全性が高いアクションでは、より厳格な方法を使用してください。 MFA バイオメトリクス [12]99.9% [12].
-
1/3 OTA (オーバー・ザ・エア) の更新システムを使用して、セキュアで即時的なロールアウトを実現します。 Capgo などのツールは、 Capacitor アプリ向けに暗号化されたライブ アップデートを可能にし、セキュリティ修正がユーザーに到達するのを token の安全性を損なうことなく、迅速に実行できます。
-
トークン ライフサイクル管理に焦点を当てます。 定期的な期限切れ、更新、削除のプロトコルは不可欠です。実装がこれらの原則を反映していることを確認して、リスクを制限します。
-
認証パターンを監視します。 異常な活動を監視し、進化する脅威に応じてセキュリティ対策を調整します。 [13]開発プロセスにおける定期的なセキュリティアウディットは、後思いついたものではなく、常に実行すべきことです。
モバイルセキュリティは進化を続けているものの、基本原則は変わりません: ネイティブのセキュアストレージを使用し、トークンのライフサイクルを効果的に管理し、暗号化は妥協することのできないものであることを保証することです。 81%のスマートフォンは現在のバイオメトリックを搭載しています。 2022年以降 [12]FAQs
::: faq
FAQs
::: faq
FAQs
::: faq iOS KeychainとAndroid Keystoreを使用することで、モバイル開発者はセキュアなトークンストレージを実現することができます。iOS KeychainとAndroid Keystoreは、ネイティブのセキュアストレージとして機能し、センシティブなデータを保護するために使用されます。これらのツールには、暗号化が組み込まれており、トークンが不正アクセスから保護されます。さらに、 ユーザー認証ユーザーがデータにアクセスする前に、自分のアイデンティティを確認する必要があるため、追加のセキュリティ層が必要になります。
1 つの重要な機能は、暗号化キーの非エクスポート性です。 non-exportableモバイルアプリでトークンライフサイクルを安全に管理するためのベストプラクティスは何ですか? モバイルアプリでトークンライフサイクルを安全に管理するには、開発者はいくつかの基本的な実践に従う必要があります。 まず、短期間のトークンを使用する必要があります。 FAQ トークンライフサイクルを安全に管理するためのベストプラクティスは何ですか?. :::
::: faq
FAQ
FAQ FAQ、15分以内の有効期限を持つものなど、 これにより、トークンが漏洩した場合の悪用の窓口を最小限に抑えることができます。ユーザーの便利さを維持しながら、セキュリティを犠牲にしないようにするには、
refresh tokens Keychain iOS または KeychainのiOS版や
Android Keystore
::: faq
これらの実践を組み込むことで、開発者はモバイルアプリケーションのトークン管理のセキュリティを向上させ、ユーザーを潜在的な脆弱性から守ることができます。 :::
::: faq
極めて敏感なデータを扱う場合や、標準ツールでは対応できない厳格な規制要件を満たす必要がある場合など、カスタム暗号化が不可避な状況もある。 最適なセキュリティ対策 安全性を確保するために 暗号化方法 暗号化アプローチを自作する前に、業界標準に準拠し、信頼性の高いものであるかどうかを慎重に検討する必要があります。
セキュア トークン ストレージ:モバイル開発者向けベスト プラクティス
もしあなたがCapgoを使用している場合 セキュアなトークンストレージ: モバイル開発者向けベストプラクティス セキュリティとコンプライアンスを計画するには、接続する エンクリプション 暗号化の実装詳細のために コンプライアンス コンプライアンスの実装詳細について Capgo セキュリティ スキャナー Capgo セキュリティ スキャナーの製品ワークフローについて Capgo セキュリティ Capgo セキュリティの製品ワークフローについて、そして Capgo トラスト センター Capgo トラスト センターの製品ワークフローについて