Webサービスにログインするためにユーザー名/パスワードを手動で作成する必要があるユーザーの負担を取り除こうとしているので、代わりにアプリの最初の起動時にユーザー名とパスワードの作成を自動化します。
だから私はSSKeychainを使ってパスワードをキーチェーンに保存しています
[SSKeychain setPassword: myPassword forService: @"com.xxx.xxx" account: username];
以下を使用してUUID(ユーザー名とパスワードの両方)を生成します。
+(NSString *) GetUUID {
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
return [(NSString *)string autorelease];
}
1人のユーザーがすべてのデバイスでこれらの資格情報にアクセスできるようにしたいので、NSUserDefaultsとiCloudを使用してユーザー名を保存し、ユーザーがアプリの新しいコピーを新しいデバイスにインストールしたときにユーザー名ができるようにすることを考えています。 iCloudから取得され、キーチェーンを使用して資格情報にアクセスできます。これにより、Webサービスへのアクセスが許可されます。
理想的には、次の機能が必要です
- 最初のログイン時に、アプリケーションは自動的にユーザー名/パスワードを生成します
- ユーザーはクレデンシャルを入力する必要はありませんが、アプリの自動アカウント作成部分を通過するだけです。
- 任意のデバイスにアプリをインストール/再インストールした後、NSUserDefaults/iCloudに保存されている「ユーザー名」を使用してキーチェーン内の資格情報にアクセスできるようになります
だから私の問題は:
- ユーザー名をNSUserDefaultsに保存すると、別のユーザーが自分の電話のNSUserDefaults plistを変更して、他のユーザーのアカウントにアクセスできるようになりますか?(私の理解から、それはイエスです)
- 別のユーザーがplistを変更して他の人のアカウントに自動ログインできないように、ユーザー名を保存する別の方法はありますか?
- 私はキーチェーンの概念と少し混乱しているので、私の理解から、キーチェーンはアプリ全体で共有されます(世界中のすべてのユーザーの暗号化されたデータの中央データベースのように(?))、技術的には別のユーザーがアクセスできる場合あなたの資格情報に(つまり、彼らはあなたのユーザー名を知っていて、NSUserDefaultの自分のユーザー名をあなたのユーザー名に置き換えます)、これを使用してあなたのデータにアクセスできます。これは正しいです?(キーチェーンはMacに似ていると思いました。ここでは、各ユーザーにとって一意の安全なストレージです)。
私は通常、概念をよく理解していますが、キーチェーンによって少し混乱しました。Appleのキーチェーンの概念の説明を読みましたが、それがすべてのユーザーがアクセスする暗号化データの中央リポジトリであるのか、各ユーザーが独自のキーチェーンストレージを持っていて、他のユーザーのキーチェーンストレージに誰もアクセスできないのかという概念を理解できません。彼らは彼らのユーザー名/パスワードを持っていました。