如何使用iOS钥匙串在iPhone上存储OAuth令牌?
问题描述:
我打算使用RestKit使用OAuth访问web api。在RestKit doc raecommendations:如何使用iOS钥匙串在iPhone上存储OAuth令牌?
我们强烈建议您保留的access_token,refresh_token, 的clientId和clientSecret使用的iOS钥匙扣或其他安全 存储方式。
如何使用iOS Keychain
来存储秘密令牌?
更新:此问题已倒票。可能我没有把我的问题弄清楚。我知道有iOS Keychain和APIs。我的问题是如何在应用程序发货之前将一个token
存储在一个秘密的地方(使用iOS Keychain或其他加密库),而没有纯文本版本存储在其他地方(代码或plist)。由于它是一个不应该由用户输入的api标记,我怎样才能初始化标记。
答
您有文档right here,但我强烈建议您在真正敏感的数据(如银行数据或财务信息)的情况下不要使用iOS钥匙串,因为它充满安全漏洞,存在大量漏洞黑客访问这个钥匙串(一旦授予设备访问权,无论是远程使用越狱的SSH还是直接访问iPhone)。
为了存储不敏感的数据,比如access_token,没关系。
答
我们在符合NSCoding协议的令牌类中存储各种组件(accessToken,refreshToken等)。然后,我们将对象存档并将其作为字符串存储在钥匙串中。
我们TokenModel协议看起来是这样的:
@protocol TokenModel <NSCoding, NSObject>
@property(nonatomic, strong, readonly) NSString *accessToken;
@property(nonatomic, strong, readonly) NSDate *expirationDate;
@property(nonatomic, assign, readonly) NSTimeInterval expiresIn;
@property(nonatomic, strong, readonly) NSString *refreshToken;
@property(nonatomic, strong, readonly) NSString *tokenType;
- (BOOL)isAccessTokenExpired;
@end
我们用一个钥匙链服务的辅助,让我们简单地访问如钥匙扣NSUserDefaults的,与存储的对象必须遵循NSCoding协议同样的要求。
@protocol KeychainService <NSObject>
- (id)objectForKey:(id)key error:(NSError * __autoreleasing *)error;
- (BOOL)setObject:(id)object forKey:(id)key error:(NSError * __autoreleasing *)error;
- (BOOL)removeObjectForKey:(id)key error:(NSError * __autoreleasing *)error;
@end
我想你应该改写你的问题。 – 2012-05-01 15:50:01