【问题标题】:iOS authentication for file upload?文件上传的iOS身份验证?
【发布时间】:2013-06-12 10:29:59
【问题描述】:

我正在努力弄清楚如何使用我的 Box 身份验证令牌来使用 Box API。我已经在我的应用程序中构建了身份验证流程,以便我可以将相关部分(访问令牌、刷新令牌等)保存到钥匙串中。我遇到的问题是,每当我重新打开应用程序时,我似乎都找不到合适的方法来设置我的 BoxOAuth2Session 或任何重新使用保存的令牌将文件上传到 Box 的方法。目前,我正在使用我的 clientID 和 secret 重新创建 BoxOAuth2Session,并在该会话上手动设置 accessToken、refreshToken 等值。我创建了一个 BoxFilesResourceManager,附加了这个 BoxOAuth2Session,并使用 uploadFileWithInputStream 上传了一个文件。此请求总是以 401 失败。我能够将文件上传到 Box 的唯一方法是立即在使用 [BoxSDK sharedSDK].filesManager 的登录步骤之后。重新创建 OAuth 状态以访问 API 的预期工作流程是什么?

【问题讨论】:

    标签: ios box-api


    【解决方案1】:

    BoxOAuth2Session 绑定到 SDK 实例。当您访问 [BoxSDK sharedSDK] 单例时,您使用的是已经与自己的 BoxOAuth2Session 和管理器实例连接的 SDK 实例。在正常使用中,我们建议使用sharedSDK 单例,因此您应该操作附加到此SDK 的BoxOAuth2Session

    一种方法是尝试从钥匙串加载刷新令牌并在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 会话并在下次 API 调用时获取新的访问令牌和刷新令牌,只要刷新令牌未被撤销且未过期。你不妨manually trigger a heartbeat call to force a refresh

    我们已将a sample app that demonstrates how to store and load refresh tokens using the keychain 放在一起。

    附带说明,我们不建议将访问令牌存储在设备上,因为此令牌是不记名令牌;丢失此令牌可能会让 Mallory 冒充您应用的用户。

    【讨论】:

    • 感谢您的澄清。但是,即使执行此操作(登录、存储刷新令牌),SDK 也会在文件上传时不断报告以下错误。 Error Domain=com.box.sdk.errordomain Code=20001 "操作无法完成。(com.box.sdk.errordomain error 20001.)
    • 这个错误码对应常量BoxSDKOAuth2ErrorAccessTokenExpiredOperationCannotBeReenqueued。涉及NSStreams 的操作(上传、下载和缩略图操作)在刷新后无法自动重试,因为这些流无法复制。令牌将自动刷新,但您必须在BoxOAuth2SessionDidRefreshTokensNotification 发布后再次发出上传调用。
    • 另外请注意,每次刷新令牌时都必须存储新的刷新令牌,因为刷新令牌是一次性使用的。
    • 谢谢!看起来它现在正在工作。仅供参考,我发现这个过程非常不直观。可能值得刷新文档以更详细地描述这些案例。
    • 在应用退出后,我无法让我的应用保持身份验证。我加载了刷新令牌并尝试了心跳,但什么也没有。我仍然需要登录。你是如何解决这个问题的?需要更多的文档。
    猜你喜欢
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    相关资源
    最近更新 更多