创建“永远登录”的IOS应用程序最安全的方法是什么?

时间:2013-04-07 17:52:18

标签: ios security authentication

我正在编写代码,用户使用电子邮件+密码注册帐户。我希望将登录凭据存储在IOS应用程序中,然后用于用户进行的所有远程操作(创建订单,更新帐户信息等)。

使用PDKeychainBindings将密码存储在IOS钥匙串中是否安全,然后通过HTTPS发送用户/传递给服务器的每个请求?

有更好/更安全的方式吗?

2 个答案:

答案 0 :(得分:4)

有两种方法:

1)您可以使用KeyChain:http://developer.apple.com/library/ios/#documentation/Security/Conceptual/keychainServConcepts/iPhoneTasks/iPhoneTasks.html

示例:

//Initializing
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil];
//Saving
[keychainItem setObject:@"password you are saving" forKey:kSecValueData];
[keychainItem setObject:@"username you are saving" forKey:kSecAttrAccount];
//Getting
NSString *password = [keychainItem objectForKey:kSecValueData];
NSString *username = [keychainItem objectForKey:kSecAttrAccount];
//deleting
[keychainItem resetKeychainItem];

2)您可以使用NSUserDefaults

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *pword = [prefs setObject:@"yourpassword" ForKey:@"password"];
NSString *username = [prefs setObject:@"username" ForKey:@"username"];
[prefs synchronize];
//getting 
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *pword = [prefs objectForKey:@"password"];
NSString *username = [prefs objectForKey:@"username"];

方法1比方法2更安全。您可以通过加密密码和用户名来使方法2更安全。

希望这会有所帮助..

答案 1 :(得分:4)

最安全的方法是不保存密码。通常,在第一次连接时,您需要更换用户名&永久授权令牌的密码。

然后,您将此令牌保存到钥匙串中,并且所有其他服务器请求仅由令牌授权。只有在令牌失效时,您才要求用户再次输入密码。 (它是永久性的,因此它不应该过期,但它可以被服务器无效)。