2013-06-12 77 views
2

我正在努力弄清楚如何使用我的Box認證令牌來使用Box API。我已將身份驗證流構建到我的應用程序中,以便將相關的部分(訪問令牌,刷新令牌等)保存到鑰匙串中。我遇到的問題是,無論何時我重新打開應用程序,我似乎都無法找到設置BoxOAuth2Session的適當方式,或者重新使用保存的令牌將文件上傳到Box的任何方法。目前,我正在用我的clientID和secret重新創建BoxOAuth2Session,並在該會話上手動設置accessToken,refreshToken等值。我創建一個BoxFilesResourceManager,附加這個BoxOAuth2Session,並用uploadFileWithInputStream上傳一個文件。此請求總是以401失敗。我使用[BoxSDK sharedSDK] .filesManager在登錄步驟之後,能夠將文件上傳到Box的唯一方法是立即。重新創建OAuth狀態以訪問API的預期工作流程是什麼?用於文件上傳的iOS驗證?

回答

4

A 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冒充您應用的用戶。

+0

感謝您的澄清。但是,即使執行此操作(登錄,存儲刷新令牌),SDK在文件上傳過程中也會不斷報告以下錯誤。錯誤域= com.box.sdk.errordomain代碼= 20001「該操作不能完成。(com.box.sdk.errordomain錯誤20001.) – jimt

+0

此錯誤代碼對應於涉及'NSStream恆定'BoxSDKOAuth2ErrorAccessTokenExpiredOperationCannotBeReenqueued'。操作上傳,下載和縮略圖操作)不能在刷新後自動重試,因爲這些流不能被複制。令牌將自動刷新,但在發佈BoxOAuth2SessionDidRefreshTokensNotification後,您必須再次發出上傳呼叫。 –

+0

另外請注意,你將不得不每次令牌被刷新時間存儲新的刷新令牌,因爲刷新令牌,一次性使用。 –