我正在努力弄清楚如何使用我的 Box 身份验证令牌来使用 Box API。我已经在我的应用程序中构建了身份验证流程,以便我可以将相关部分(访问令牌、刷新令牌等)保存到钥匙串中。我遇到的问题是,每当我重新打开应用程序时,我似乎都找不到合适的方法来设置我的 BoxOAuth2Session 或任何重新使用保存的令牌将文件上传到 Box 的方法。目前,我正在使用我的 clientID 和 secret 重新创建 BoxOAuth2Session,并在该会话上手动设置 accessToken、refreshToken 等值。我创建了一个 BoxFilesResourceManager,附加了这个 BoxOAuth2Session,并使用 uploadFileWithInputStream 上传了一个文件。此请求总是以 401 失败。我能够将文件上传到 Box 的唯一方法是立即按照使用 [BoxSDK sharedSDK].filesManager 的登录步骤。重新创建 OAuth 状态以访问 API 的预期工作流程是什么?
问问题
1047 次
1 回答
4
ABoxOAuth2Session
绑定到一个 SDK 实例。当您访问[BoxSDK sharedSDK]
单例时,您使用的 SDK 实例已经与它自己的BoxOAuth2Session
实例和管理器实例连接起来。在正常使用中,我们建议使用sharedSDK
单例,因此您应该操作BoxOAuth2Session
附加到此 SDK 的附件。
一种方法是尝试从钥匙串加载刷新令牌并refreshToken
在OAuth2Session
.
[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 会话并在下一次 API 调用时获取新的访问令牌和刷新令牌,只要刷新令牌未被撤销且未过期。您可能希望手动触发心跳调用以强制刷新。
我们整理了一个示例应用程序,演示了如何使用 keychain 存储和加载刷新令牌。
附带说明一下,我们不建议将访问令牌存储在设备上,因为此令牌是不记名令牌;丢失此令牌可能会让 Mallory 冒充您应用的用户。
于 2013-06-12T02:29:59.403 回答