2012-04-25 2 views
1

OAuth를 사용하여 웹 API에 액세스하려면 RestKit을 사용하려고합니다. RestKit doc raecommendations에서 :iOS Keychain을 사용하여 iPhone에 OAuth 토큰을 저장하는 방법은 무엇입니까?

우리는 강력하게 아이폰 OS 키 체인 또는 기타 보안 저장 방법을 사용하여 access_token은, refresh_token도, 된 ClientID 및 clientSecret을 유지하는 것이 좋습니다.

비밀 토큰을 저장하는 데 어떻게 iOS Keychain을 사용할 수 있습니까?

업데이트 :이 질문은 아래로 투표되었습니다. 아마도 제 질문을 분명히하지 않았을 것입니다. I 알고있다 iOS 키 체인 및 API가 있습니다. 내 질문은 평범한 텍스트 버전을 다른 곳 (코드 또는 plist)에 저장하지 않고 앱을 출하하기 전에 비밀 장소 (iOS Keychain 또는 다른 암호화 lib 사용)에 token을 저장하는 방법입니다. 사용자가 입력하지 않아야하는 api 토큰이므로 토큰을 어떻게 초기화 할 수 있습니까?

+0

질문을 다시 작성해야한다고 생각합니다. –

답변

-2

당신은 문서가 right here입니다.하지만 보안 취약점이 많고 많은 exploits가 존재하기 때문에 (은행 데이터 나 금융 정보와 같이) 매우 민감한 데이터의 경우 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 

우리는 우리가 저장된 개체가 NSCoding 프로토콜을 준수해야합니다 같은 요구 사항, NSUserDefaults로 단순히 키 체인에 액세스 할 수 있습니다 키 체인 서비스 도우미를 사용합니다.

@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