iphone - 如何使用 iOS Keychain 在 iPhone 上存储 OAuth token ?

标签 iphone ruby-on-rails ios oauth restkit

我将使用 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/

相关文章:

ios - UICollectionView 单元格之间的距离不变

iphone - 从动画 UIImageView 获取图像

ruby-on-rails - 根据应用程序是否在 Facebook 框架内呈现/切换布局

ruby-on-rails - 在生产中使用 MongoDB 构建索引的时间和频率

ios - 仅为一个uitableview设置标题

iPhone 读取文件 - 奇怪的行为

iphone - 我可以将图像转换为点网格吗?

ruby-on-rails - gem install pg 在 OSX 10.9 上失败

iphone - 如何将操作符符号 '+,-,/,*,mod' 等添加到制作计算器的标签中?

ios - Swift 4 搜索栏中的搜索过滤器问题