我正在编写用户使用电子邮件+密码注册帐户的代码。我想将登录凭据存储在 IOS 应用程序中,然后用于用户进行的所有远程操作(创建订单、更新帐户信息等)。
使用 PDKeychainBindings 将密码存储在 IOS 钥匙串中然后将用户/通过 HTTPS 发送到服务器的每个请求是否安全?
有没有更好/更安全的方法?
我正在编写用户使用电子邮件+密码注册帐户的代码。我想将登录凭据存储在 IOS 应用程序中,然后用于用户进行的所有远程操作(创建订单、更新帐户信息等)。
使用 PDKeychainBindings 将密码存储在 IOS 钥匙串中然后将用户/通过 HTTPS 发送到服务器的每个请求是否安全?
有没有更好/更安全的方法?
有两种方法:
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 更安全。
希望这可以帮助..
最安全的方法是不保存密码。通常,在第一次连接时,您将用户名和密码交换为永久授权令牌。
然后将此令牌保存到钥匙串中,所有其他服务器请求仅由该令牌授权。仅当令牌无效时才要求用户再次输入密码。(它是永久性的,所以它不应该过期,但它可以被服务器失效)。