Alamofireを使用してAPIと相互作用するiOSを作成しており、ほとんどのリクエストでトークンが必要です。 MVCパターンを使用してアプリケーションを構築しましたが、うまくいきましたが、APIを統合しようとしたときに問題が発生しました。ビューコントローラ/モデルからアクセスできるように、トークンをどのように共有/保存する必要がありますか?私はシングルトンやUserDefaults
を使用することについて、かなり読んで、否定的な意見を見つけましたが、まだ簡単な答えに遭遇していません。これは簡単な答えがないかもしれない非常に広範な質問であると理解していますが、私はこれにはかなり新しく、誰かが私を正しい方向に向けるのを助けることができるのだろうかと思っていました。ありがとう!iOSアプリケーションにトークンを保存するためのベストプラクティス
答えて
ビューコントローラでこのトークンが必要な場合は、MVCが壊れています。 View Controllerがネットワークと直接通信する理由はありません。それはモデルレイヤーで処理する必要があります。ビューコントローラは、画面上にある間にビューを調整します。それは他のことをしません。
あなたのトークンはモデルに保存されます。ビューコントローラはどのようにモデルにアクセスしますか?それはあなたの経験レベルに依存します:
あなたはココアの開発にかなり新しいしている場合(実際に、それはシングルトンではないのですけれども、「シングルトン、」;それだけ
static let shared
財産です)、共有インスタンスを使用します。このパターンは、何十年もの間、Cocoa開発者によって非常にうまく使用されてきました。私たちはそれを使う理由があります。それだけで動作し、あなたはそれと戦う必要はありません。しかし、それには次のオプションがあります:実際に共有インスタンスの問題に遭遇するほどのiOS経験がある場合(通常は単体テストやコード再利用に関係することがあります)あなたは、近年人々が適用している(そして時には発明している)他の多くのパターンすべてについて意見を述べるのに十分なことを知っています。しかし、これらのより複雑なパターンに飛び乗ることは、私の意見では、新しい開発者のための良いアプローチではありません。彼らは、Appleが私たちの仕事の意図から離れてしまう傾向があります(特に、Storyboardsを使用しないことを前提としており、AppleはStoryboardsを非常に難しくしています)。 Appleのガイダンスに反する理由はありますが、それは必ずしも正しいとは言えず、新しいパターンのいくつかは非常に興味深いものです。しかし、あなたがCocoaアプリケーションの開発についてAppleよりも多くを知っていることを決める前に、あなたがいくつかの経験があるまで待ってください。
トークンをメモリに保存する必要がある場合は、完了です。それを維持する必要があり、それが機密扱いと考えられる場合、正しい場所はKeychainです。ラッパーを使用します。 Keychain APIは説明を超えて恐ろしいです。すべてのラッパーが行います。最近ではKeychainAccessが人気がありますが、実際にはいずれも問題ありません。
NSUserDefaultsとの主な問題は、誰かが電話を盗んで脱獄すると、キーチェーンよりもNSUserDefaultsを読みやすくなります。ポリシーの問題として、機密情報をNSUserDefaultsに入れないでください。
- 1. ASP.NETアプリケーションでシングルトンインスタンスを保存するためのベストプラクティス
- 2. ベストプラクティスのためにMongoDBに価格を保存するには?
- 3. iOSプログラミング:トークンで購入したスキンを保存するには
- 4. パブリケーションのメタデータをMySQLに保存するためのベストプラクティス[PHP]
- 5. Java Webアプリケーションでリソースファイルを保存およびアクセスするためのベストプラクティス
- 6. ネクサスにmaven成果物を保存するためのベストプラクティス
- 7. PHPからMySQLに日付を保存するためのベストプラクティス
- 8. Unity3dでFirebaseにDateTime値を保存するためのベストプラクティス
- 9. app.yamlにシークレットを保存するためのベストプラクティス
- 10. データベースにバスルートを保存するためのベストプラクティス
- 11. HTMLテンプレートをページに保存するためのベストプラクティス?
- 12. JSONをDOMに保存するためのベストプラクティス
- 13. Node.jsバッファをMySQLに保存するためのベストプラクティス
- 14. ウェブサーバーにプライベート画像を保存するためのベストプラクティス
- 15. Cloudant DBにデータを保存するためのベストプラクティス
- 16. iOSアプリケーションにPDFファイルを保存する
- 17. アプリケーションをforgroundに保存する(iOS)
- 18. 大量のデータをJ2MEで保存するためのベストプラクティス
- 19. ExtJs:イメージの保存/取得を処理するためのベストプラクティス
- 20. データベースのパスワードを保存するためのベストプラクティス
- 21. SQL Serverでイメージを保存するためのベストプラクティス
- 22. C#/ Javaローカルでデータを保存するためのベストプラクティス
- 23. 設定を保存するためのベストプラクティス
- 24. RedisでユーザーIDを保存するためのベストプラクティス
- 25. Azure関数でデータを保存するためのベストプラクティス
- 26. svgアイコンを保存するためのベストプラクティス?
- 27. Windows 8で機密データを保存するためのベストプラクティス
- 28. データを保存するためのベストプラクティスiPhoneアプリ
- 29. 最終的なリストデータを保存するためのベストプラクティス
- 30. データと画像を保存するためのベストプラクティス
これは役に立ちますか? https://stackoverflow.com/questions/16795506/storing-authentication-tokens-on-ios-nsuserdefaults-vs-keychain – Jon
@Matthew Harriesは、セキュリティ目的のためにUserDefaultsにトークンを保存することはありません。そのためにAppleキーチェーンを使用できます。 UserDefaultsは重要でない情報を保存するために使用されます。 –