我正在努力弄清楚如何使用我的 Box 身份验证 token 来使用 Box API。我已经在我的应用程序中构建了身份验证流程,以便我可以将相关部分(访问 token 、刷新 token 等)保存到钥匙串(keychain)中。我遇到的问题是,每当我重新打开应用程序时,我似乎都找不到合适的方法来设置我的 BoxOAuth2Session 或任何重新使用保存的 token 将文件上传到 Box 的方法。目前,我正在使用我的 clientID 和 secret 重新创建 BoxOAuth2Session,并在该 session 上手动设置 accessToken、refreshToken 等值。我创建了一个 BoxFilesResourceManager,附加了这个 BoxOAuth2Session,并使用 uploadFileWithInputStream 上传了一个文件。此请求总是以 401 失败。我能够将文件上传到 Box 的唯一方法是立即在使用 [BoxSDK sharedSDK].filesManager 的登录步骤之后。重新创建 OAuth 状态以访问 API 的预期工作流程是什么?
Best Answer-推荐答案 strong>
BoxOAuth2Session 绑定(bind)到 SDK 实例。当您访问 [BoxSDK sharedSDK] 单例时,您使用的是已经与自己的 BoxOAuth2Session 和管理器实例连接的 SDK 实例。在正常使用中,我们建议使用 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/
|