私は(部分的に) tutorial に従って、angularJSに基づいてCordovaアプリを開発しています。著者は更新トークンを local storage に格納します。これは、同じチュートリアルのコメントの1つで非常に悪い習慣であると言われていました。これは 別のstackexchange質問 で確認されます。次に、更新トークンを安全なHttpOnly
cookieに保存することをお勧めします。 [〜#〜] owasp [〜#〜] もこれをガイドラインとして言及しており、ネイティブアプリでは不可能であるCookieの使用を主張しています。
これで、ブラウザーを介してアプリを利用できる場合に、なぜそれが悪い習慣であるかがわかりますが、アプリを「フォンギャップ」して(ネイティブアプリになるようにする)場合、更新トークンをローカルに保存することも悪い習慣ですストレージ?
その場合、「ネイティブ」アプリにはCookieが存在しないため、更新トークンをどこに保存すればよいですか?
PhoneGap/Cordovaセキュリティガイド によると、機密データの保存にはlocalstorageは推奨されないようです。 それであなたは何ができますか?
さて、ここにあなたが使用できると思う2つのオプションがあります。
1-更新トークンを暗号化し、暗号化してlocalstorageに保存します。 CryptoJS(データを暗号化/復号化するためのJSライブラリ)を使用して、AES( この例を参照) を使用してトークンを暗号化できます angularjsモジュール もあります
2- Cordova File API を使用して、デバイス/電話ファイルシステムに更新トークンを保存できます。セキュリティをさらに強化するために、データを暗号化してデバイスのファイルシステムに保存できます。 Androidについての注記:AES 128ビットのキーサイズに制限されますが、サードパーティのプラグインを使用して256に増やすことができます。
実際、Phonegapアプリは本当に「すべてネイティブ」ではありません。 (ファイルアクセス、カメラアクセスなどの)システム機能のみがJava対応するものに変換されます。それでも、Webviewと多くのJavaScriptを使用して、アプリケーションビジネスロジックを実装します。
ローカルストレージの問題はこれらのフレームワーク(PhoneGap、Cordova、Ionicなど)で使用されるWebビューコンポーネントの機能であるため、問題に答えるにはまだ有効な懸念事項です。 UI。
さらに、識別/秘密要素(セッションID、更新トークンなど)を含むすべてのリクエストは、[〜#〜] https [〜#〜]、悪意のあるオブザーバーが自分の価値を知るのを防ぎます。
CookieでマークされたHttpOnly
フラグは、JavaScriptを介して値が操作されるのを防ぐだけです。したがって、暗号化されていない接続を介して送信されないように、これらのCookieにSecure
フラグも追加する必要があります。
また、暗号化された接続を使用する場合は、証明書を受け入れないようにしてください。サーバーから提供された証明書の有効性を正しく確認してください。
証明書に対してこのチェックを無効にするか「true」を返す代わりに、自己署名証明書の安全なソリューションは、生成した証明書を固定するか、証明書の作成に使用したCAを信頼できるCAのリストに追加します。
モバイルアプリの通信を保護するための探求をさらに支援するには:
証明書のピン留めを説明するOWASPドキュメント
長所と短所について話し、リンクと例を提供するページ
証明書のピン留めに関するSEの質問
編集:
私が理解できたことから、これはフレームワークの実装によって作成された不正な動作です。長い答えは短い:「それは可能であるはずですが、我々は物事を台無しにしました。」 PhoneGap用のテストアプリを開発してみましたが、このような(実装)エラーが発生し、あきらめてAndroidに戻ってきました。そうは言っても、あなたのアプリケーションはあなたが言ったようにネイティブではないので正しいはずですが、残念ながら電話ギャップのやり方のために問題を解決することができなかったので、私はあなたの答えをゼロに上げてください。