2013-06-12 3 views
2

Я изо всех сил пытаюсь понять, как использовать токены для проверки подлинности Box, чтобы использовать API-интерфейс Box. Я создал поток аутентификации в своем приложении, чтобы я мог сэкономить соответствующие фрагменты (токен доступа, обновить токен и т. Д.) В Keychain. Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я снова открываю приложение, я не могу найти подходящий способ настроить мой BoxOAuth2Session или что-то еще, чтобы повторно использовать сохраненные токены для загрузки файлов в Box. В настоящее время я воссоздаю BoxOAuth2Session с моим идентификатором clientID и секретным и вручную устанавливая значения accessToken, refreshToken и т. Д. На этом сеансе. Я создаю BoxFilesResourceManager, присоединяю этот BoxOAuth2Session и загружаю файл с uploadFileWithInputStream. Этот запрос всегда терпит неудачу с 401. Единственный способ, которым я мог загружать файлы в Box, - сразу после шага входа, используя [BoxSDK sharedSDK] .filesManager. Каков ожидаемый рабочий процесс для воссоздания состояния OAuth для доступа к API?Проверка подлинности iOS для загрузки файлов?

ответ

4

A BoxOAuth2Session связан с экземпляром 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, до тех пор, пока лексема обновления не был аннулирован и не истек. Вы можете пожелать manually trigger a heartbeat call to force a refresh.

Мы собрали a sample app that demonstrates how to store and load refresh tokens using the keychain.

В качестве побочного примечания мы не рекомендуем хранить токен доступа на устройстве, поскольку этот токен является токеном-носителем; потеря этого токена может позволить Мэллори олицетворять пользователей вашего приложения.

+0

Спасибо за разъяснение. Однако даже при этом (вход в систему, сохранение токена обновления) SDK постоянно сообщает о следующей ошибке при загрузке файла. Ошибка домена = com.box.sdk.errordomain Код = 20001 «Операция не может быть выполнена. (Com.box.sdk.errordomain error 20001.) – jimt

+0

Этот код ошибки соответствует константе' BoxSDKOAuth2ErrorAccessTokenExpiredOperationCannotBeReenqueued'. Операции с использованием 'NSStream 's (закачки, загрузки и работы с миниатюрами) не могут быть автоматически повторены после обновления, потому что эти потоки не могут быть скопированы. Токены будут обновляться автоматически, но вам придется повторно отправить запрос на загрузку после публикации« BoxOAuth2SessionDidRefreshTokensNotification ». –

+0

Также обратите внимание, что вам нужно будет хранить новый токен обновления каждый раз, когда токены обновляются, поскольку токены обновления являются одноразовыми. –

Смежные вопросы