2016-08-10 21 views
0

Box Storageの特定のファイルを検索するJavaプログラムを作成しようとしています。このため私はBox Java SDKを使用しようとしており、Box(https://app.box.com/developers/services)でアプリケーションを作成しました。Box Java SDKアクセストークンの取得

私は開発者トークンを使用すると、ボックスの親子フォルダを通過することができます。このトークンは60分有効なので、私はプログラムでトークンを取得して設定したい。私はマニュアルを見て、マンチェスターがこれらのトークンを得るためにapiを呼び出すと言う。私は以下のコードを試してみました

..私はユーザーにあるボックスのログインページをスローしたくないとファイルを検索し、いくつかのレポートのテキストファイルを吐き出すだろうデーモンとしてこのプログラムを実行したい

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

ありがとうございました。

+0

リフレッシュとアクセストークンを要求する認証方法は、最初の認証コードを取得することによって生成され、これは、ログインするユーザーを必要と私はより多くの読書やサンプルを行っていると私はSDKを使用してthings.Whenのカップルを理解しますボックスにアクセスし、アクセスを許可します。これが完了したら、認証コードを使用して、ポストリクエストを行ってトークンを取得します。私はこれをデーモンプロセスとして実行する必要があるので、これを回避しようとしています。私がこのステップを避けることができるかどうか教えてください。 – 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にアクセスし、クライアントID、クライアントシークレット、アクセストークン、および更新トークンを取得します。
  2. DBまたはプロパティファイルに保存します。
  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()); 
    } 
    
関連する問題