2016-08-10 7 views
0

Я пытаюсь создать java-программу, которая будет искать определенные файлы в Box Storage. Для этого я пытаюсь использовать Box Java SDK, и я создал приложение в Box (https://app.box.com/developers/services).Box Java SDK Retrieve acces/refresh tokens

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

Я попытался код ниже ..

BoxAPIConnection api = new BoxAPIConnection(clientid,clientsecret); 
String accesstoken = api.getAccessToken(); 
String refreshtoken = api.getRefreshToken(); 

Я не хочу бросать страницу окна входа в системе для пользователя и хочу запустить эту программу в качестве демона, который будет искать файлы и выплюнуть некоторые текстовый файл отчета ,

Спасибо за помощь.

+0

Я сделал больше читать и образец, и я понимаю пару things.When с помощью SDK метод проверки подлинности, который требует обновлений и доступ маркера генерируется первым получает код аутентификации и это требует от пользователей для входа для ввода и предоставления доступа. Как только это будет сделано, используйте код auth для выполнения запроса Post для получения токенов. Я пытаюсь избежать этого, поскольку мне нужно запустить это как процесс демона. Пожалуйста, дайте мне знать, могу ли я избежать этого шага. – user3912976

ответ

0

Если вы используете файл state.conf, вы сможете программно обновить пару токенов/refres_token, не получая код аутентификации. Вот фрагмент кода, который я использую:

private static BoxAPIConnection getBoxAPIConnection(String client_id, String client_secret, String token, String refresh_token, String stateConfPath) { 

    String state = null; 
    try { 
     logger.info("Getting state.conf: " + stateConfPath + "/state.conf"); 
     InputStream fis = new FileInputStream(stateConfPath + "/state.conf"); 
     InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-8")); 
     BufferedReader br = new BufferedReader(isr); 
     state = br.readLine(); 
    } 
    catch (FileNotFoundException f) { 
     try { 
      // create file if it doesn't exist 
      PrintWriter writer = new PrintWriter(stateConfPath + "/state.conf", "UTF-8"); 
      writer.println(""); 
      writer.close(); 
     } 
     catch (Exception w) { 
      logger.fatal("Exception", w); 
     } 
    } 
    catch (IOException e) { 
     logger.fatal("IOException", e); 
    } 

    BoxAPIConnection api = null; 

    //if (null == state || "".equals(state)) { 
    if (!token.equals("") && !refresh_token.equals("")) { 
     api = new BoxAPIConnection(client_id, client_secret, token, refresh_token); 
    } else { 
     logger.info("Restoring state..." + state); 
     api = BoxAPIConnection.restore(client_id, client_secret, state); 
     if (api.needsRefresh()) { // this is not a reliable call. It can still throw a 401 below 
      logger.info("api refreshing..."); 
      api.refresh(); 
     } 
     else { 
      logger.info("api good..."); 
     } 
    } 

    return api; 
} 
0

Возможно управлять вводом логина через код.

  1. Впервые вы получаете доступ к Box.com и получаете идентификатор клиента, секрет клиента, токен доступа и токен обновления.
  2. Сохраните его в БД или файле свойств.
  3. Используйте приведенный ниже код и каждый раз обновляйте токен доступа и обновите токен.

    String accessToken = // access token from DB/property 
    String refreshToken = // refresh token from DB/property 
    String boxClientId = // client id from DB/property 
    String boxClientSecret = // client secret from DB/property 
    try { 
        BoxAPIConnection api = new BoxAPIConnection(boxClientId, boxClientSecret, accessToken, refreshToken); 
        api.addListener(new BoxAPIConnectionListener() { 
         @Override 
         public void onRefresh(BoxAPIConnection api) { 
          String newAccessToken = api.getAccessToken(); 
          String newrefreshToken = api.getRefreshToken(); 
          // update new access and refresh token in DB/property 
         } 
         @Override 
         public void onError(BoxAPIConnection api, BoxAPIException error) { 
          LOGGER.error("Error in Box account details. " + error.getMessage()); 
         } 
        }); 
        LOGGER.debug("Completed Box authentication"); 
    } catch (Exception e) { 
        LOGGER.error("Error in Box authentication. Error msg : " + e.getMessage()); 
    } 
    

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

  • Нет связанных вопросов^_^