- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在努力弄清楚如何使用我的 Box 身份验证 token 来使用 Box API。我已将身份验证流程构建到我的应用程序中,以便我可以将相关部分(访问 token 、刷新 token 等)保存到钥匙串(keychain)中。我遇到的问题是,每当我重新打开应用程序时,我似乎都找不到合适的方法来设置我的 BoxOAuth2Session 或任何重新使用保存的 token 将文件上传到 Box 的方法。目前,我正在使用我的 clientID 和密码重新创建 BoxOAuth2Session,并在该 session 上手动设置 accessToken、refreshToken 等值。我创建了一个 BoxFilesResourceManager,附加了这个 BoxOAuth2Session,并使用 uploadFileWithInputStream 上传了一个文件。此请求总是失败并返回 401。我能够将文件上传到 Box 的唯一方法是立即在登录步骤后使用 [BoxSDK sharedSDK].filesManager。重新创建 OAuth 状态以访问 API 的预期工作流程是什么?
最佳答案
BoxOAuth2Session
绑定(bind)到 SDK 实例。当您访问 [BoxSDK sharedSDK]
单例时,您使用的是一个 SDK 实例,该实例已经连接了它自己的 BoxOAuth2Session
和管理器实例。在正常使用中,我们建议使用 sharedSDK
单例,因此您应该操作附加到此 SDK 的 BoxOAuth2Session
。
执行此操作的一种方法是尝试从钥匙串(keychain)加载刷新 token 并设置 OAuth2Session
上的 refreshToken
属性。
[BoxSDK sharedSDK].OAuth2Session.clientID = @"YOUR_CLIENT_ID";
[BoxSDK sharedSDK].OAuth2Session.clientSecret = @"YOUR_CLIENT_SECRET";
// set up stored OAuth2 refresh token
self.keychain = [[KeychainItemWrapper alloc] initWithIdentifier:REFRESH_TOKEN_KEY accessGroup:nil];
id storedRefreshToken = [self.keychain objectForKey:(__bridge id)kSecValueData];
if (storedRefreshToken)
{
[BoxSDK sharedSDK].OAuth2Session.refreshToken = storedRefreshToken;
}
SDK 会自动刷新 OAuth2 session 并在下次 API 调用时获取新的访问 token 和刷新 token ,只要刷新 token 未被撤销且未过期。您不妨manually trigger a heartbeat call to force a refresh .
我们已经放在一起 a sample app that demonstrates how to store and load refresh tokens using the keychain .
附带说明一下,我们不建议将访问 token 存储在设备上,因为此 token 是不记名 token ;丢失此 token 可能会让 Mallory 冒充您应用的用户。
关于文件上传的iOS身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17056554/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!