2012-04-25 90 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 
相關問題