iOSアプリケーションを構築していて、ユーザーは私のWebサービスで認証します。アプリが起動するたびにログインしてほしくない(トークンは1か月続く)。だから私はこれをどこかのデバイスにキャッシュしたいと思います。
これを安全に行うための最良の方法は何ですか?
アプリが一時停止されたままで、トークンを「メモリ」に保持することに頼ることはできますか?
iOSアプリケーションを構築していて、ユーザーは私のWebサービスで認証します。アプリが起動するたびにログインしてほしくない(トークンは1か月続く)。だから私はこれをどこかのデバイスにキャッシュしたいと思います。
これを安全に行うための最良の方法は何ですか?
アプリが一時停止されたままで、トークンを「メモリ」に保持することに頼ることはできますか?
2つのオプション
NSUserdefaultsは、認証を目的としたこのような信頼できる値を格納するために安全ではありません。一方、キーチェーンは、これを安全かつ確実に行うために作成されています。
iOSがアプリケーションを永久にメモリに保持することを信頼することはできません。したがって、ある時点でトークンを永続ストレージに保存する必要があります。
iOS用のキーチェーンサービスを見てください。これは、パスワード、トークン、その他のキーなどを保存するのに最適な場所です。
「安全に」それを行うことはできません。トークンは公の知識であり、デバイス上でトークンを保護するために何をしようとしても、ハッカーはトークンにアクセスできるようになります。キーチェーンに入れても、この事実は変わりません。そこに保管しておくと、そこにある間は安全になりますが、期限が切れるまで待ってから、次にネットワークに接続されたときに次のものを引っ掛けることができます。実際、モバイル環境ではアクセストークンを使用できないため、アクセストークンはセキュリティ保護について心配する必要はありません。
これは、好きな場所に保存できることを意味します。NSUserDefaultsは問題なく、キーチェーンは問題なく、データベースは問題なく、ドキュメントディレクトリ内のテキストファイルは問題ありません。決心したハッカーは、必要なデータにアクセスする適切な機会を待つことができるため、これらはすべて同じように安全です。代わりに、ユーザーの認証資格情報の保護について心配する必要があります。それらをキーチェーンに保存し、有効なSSL証明書を使用してサーバーとHTTPS経由でのみAPIと通信するようにしてください。