我将使用 RestKit 通过 OAuth 访问 Web API。在RestKit doc raecommendations :
We strongly encourage you to keep access_token, refresh_token, clientId and clientSecret using the iOS Keychain or other secure storage ways.
如何使用 iOS Keychain
来存储 secret token ?
更新:这个问题被否决了。可能我没有把我的问题说清楚。我知道有 iOS Keychain 和 API。我的问题是如何在应用程序发布之前将 token
存储在一个 secret 的地方(使用 iOS Keychain 或其他加密库),而不将纯文本版本存储在其他地方(在代码或 plist 中) .由于它是一个 api token ,不应由用户输入,我该如何首先初始化 token 。
最佳答案
我们将各种组件(accessToken、refreshToken 等)存储在符合 NSCoding 协议(protocol)的 token 类中。然后我们存档对象并将其作为字符串存储在钥匙串(keychain)中。
我们的 TokenModel 协议(protocol)如下所示:
@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
我们使用一个钥匙串(keychain)服务助手,让我们可以像 NSUserDefaults 一样简单地访问钥匙串(keychain),同样的要求是存储的对象必须符合 NSCoding 协议(protocol)。
@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
关于iphone - 如何使用 iOS Keychain 在 iPhone 上存储 OAuth token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10311965/