1

我将使用 RestKit 通过 OAuth 访问 web api。在RestKit 文档 raecommendations 中

我们强烈建议您使用 iOS Keychain 或其他安全存储方式保留 access_token、refresh_token、clientId 和 clientSecret。

如何使用iOS Keychain存储秘密令牌?

更新:这个问题被否决了。可能我的问题不够清楚。我知道有 iOS 钥匙串和 API。我的问题是如何token在应用程序发布之前将 a 存储在一个秘密的地方(使用 iOS 钥匙串或其他加密库),而没有将纯文本版本存储在其他地方(在代码或 plist 中)。由于它是一个 api 令牌,不应该由用户输入,我如何首先初始化令牌。

4

1 回答 1

1

我们将各种组件(accessToken、refreshToken 等)存储在符合 NSCoding 协议的令牌类中。然后我们归档对象并将其作为字符串存储在钥匙串中。

我们的 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-09-28T23:42:33.813 回答