2012-04-25 148 views
1

我打算使用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标记,我怎样才能初始化标记。

+0

我想你应该改写你的问题。 – 2012-05-01 15:50:01

回答

-2

您有文档right here,但我强烈建议您在真正敏感的数据(如银行数据或财务信息)的情况下不要使用iOS钥匙串,因为它充满安全漏洞,存在大量漏洞黑客访问这个钥匙串(一旦授予设备访问权,无论是远程使用越狱的SSH还是直接访问iPhone)。

为了存储不敏感的数据,比如access_token,没关系。

1

我们在符合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