我正在编写代码,其中用户使用电子邮件+密码注册帐户。我希望将登录凭证存储在IOS应用程序中,然后用于用户进行的所有远程操作(创建订单,更新帐户信息等)。创建“始终登录”IOS应用程序的最安全方法是什么?
使用PDKeychainBindings将密码存储在IOS密钥链中是否安全,然后通过HTTPS将每个请求的用户/密码发送给服务器?
有更好/更安全的方法吗?
我正在编写代码,其中用户使用电子邮件+密码注册帐户。我希望将登录凭证存储在IOS应用程序中,然后用于用户进行的所有远程操作(创建订单,更新帐户信息等)。创建“始终登录”IOS应用程序的最安全方法是什么?
使用PDKeychainBindings将密码存储在IOS密钥链中是否安全,然后通过HTTPS将每个请求的用户/密码发送给服务器?
有更好/更安全的方法吗?
最安全的方式是不保存密码。通常,首次连接时,您将使用用户名&密码作为永久授权令牌。
然后,您将此令牌保存到钥匙串中,并且所有其他服务器请求仅由令牌授权。只有当令牌无效时,才要求用户再次输入密码。 (它是永久的,所以它不应该过期,但它可以被服务器无效)。
有两种方法:
实施例:
//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更安全。通过加密你的pas文件,你可以使方法2更安全剑和用户名。
希望这有助于..
这比在钥匙串中保存密码要好得多。 – 2013-04-07 19:04:42
苏丹,感谢您的回应。哪部分是不安全的?将密码存储在钥匙串中?或者通过HTTPS为每个操作发送密码?为了将标记存储在钥匙串中,是不是等于存储密码?如果有人扣留了令牌,他们也不能使用它?令牌容易被撤销的唯一区别是什么? – BigCheesy 2013-04-13 18:08:48
@BigCheesy发送每个动作的密码是危险的。你应该总是使用某种令牌。通常令牌到期(1小时左右)。移动应用程序通常使用永久令牌。它很容易更换(用户不必更改密码)。并且保存用户密码绝不安全。特别是在易被盗的设备上。 – Sulthan 2013-04-14 10:59:25