2016-11-11 9 views
0

私はREST APIManagerクラスを持っています - サーバAPIを扱うためのシングルトン。 ユーザートークンエンティティを返すログインメソッドがあります。IOS。承認後にユーザーデータを保存する場所

他のすべてのAPIメソッドはトークンを使用してリクエストを行います。 ログイン後にトークンエンティティをどこに保存する必要がありますか? 他のAPIメソッドでそのトークンを使用する方法は?もちろん

、私はNSUserDefaultsにトークン格納し、このようなAPIManagerのメソッドを実装することができます

func createNews(news:NewsEntity, token:TokenEntity){ 
... 
} 

をしかし、私は方法でTokenEntity引数から抽象化するために、その良いアイデアだと思います。どうやってするか?

答えて

2

NSUserDefaultsに機密情報を格納することはお勧めしません。代わりに、Keychain servicesを使用する必要があります。

このAPIへの単一の呼び出しを行うことで、アプリはアプリが後で情報を-も取得することができ、そこから1回の呼び出しでキーチェーン上の秘密情報の小さなビットを格納することができます。キーチェーンは、データをファイルシステムに保存する前に暗号化してデータを保護し、複雑な暗号化アルゴリズムを実装する必要性を軽減します。今

、iOSのキーホルダーはかなり低レベルのAPIを提供し、そのようなLocksmith、またはkeychain-swiftによって提供されるような、より高いレベルのラッパーを使用することは通常より良いです。例えば、後者を使用して、に格納し、キーチェーンからの読み出しが(必要なセットアップ後に)やってするのと同じくらい簡単です

ご希望の場合は、直接の道を行くとによって提供されたサンプルを使用することができます上のリンクのアップル。

let keychain = KeychainSwift() 
keychain.set("hello world", forKey: "my key") 
keychain.get("my key") 

EDIT:

コード構造については、あなたがトークンと要求ごとに必要なその他の情報をカプセル化するクラスを作成することができます。このクラスは、例えば、initトークンを取る方法を有する。この方法は、以下の単純化された署名でcreateNewsと呼ばれ、:あなたのスタイルの好みに応じて、

func createNews(news:NewsEntity) { 
    ... 

(それは賢明ではないだろうが、あるいはNSUserDefaults)、これはキーチェーンからあなたのトークンを読んシングルトンである可能性があります。

+0

なぜユーザーのデフォルトが推奨されないのかというと、キーチェーンはOSがクリーンアップされるまでこれを永久に保存します。しかし、一般的に私たちは、ユーザーがデフォルトで保存するために使用します。これは、Appがデバイスから削除されたときに削除されるためです。説明していただけますか? – Janmenjaya

+0

お返事ありがとう、セキュリティに関する問題ではなく、主にコード組織に関するものでした。私は質問しました。すべてのAPIメソッドでトークン引数を使用しないようにするには、そのトークンが必要です。私はrxAlamofire、Alamofireを使用します。 –

+1

@ジャンメンジャヤ:基本的に、強力な暗号化を使用して機密情報を保存したいとします。機密性のないものはnsuserdefaultsで問題ありません。たとえば、お使いのデバイスをMacに接続すると、アプリケーションのnsuserdefaultsを簡単に読むことができます。これはセキュリティにはかなり不満です。 – sergio

関連する問題