2017-02-21 92 views
0

我正在編寫一個在Windows 7上每天運行的控制檯c#應用程序。沒有用戶交互。有沒有以編程方式更新Box刷新令牌的方法?

該應用程序只需使用OAuth2和最新的API/SDK將CSV上傳到Box。

我希望最終可以使用企業ID,但我在企業網站中這樣做,並且很難獲得使用它的權限。所以現在,我只是用我的登錄名創建了一個應用程序,授權了應用程序,並手動接收了存儲我的刷新令牌的&。

我無法弄清楚如何在C#中管理刷新令牌。我在java中看到一些使它看起來很容易的對象,但我沒有看到相應的C#對象?使用Box登錄網頁後,是否必須在60天后手動重新授權我的應用程序?如果沒有,我需要做些什麼來檢測我的刷新標記已更改,以及如何檢索新的標記?

我也遇到了一些麻煩,因爲它似乎有很多對象隨着最新的API而改變,並且每當我搜索代碼時,它都來自幾年前,現在已經過時。

+0

這就是你的編程技能踢在哪裏..如果沒有API沒有擴展方法或附加的給我,這是看起來你會編寫自己的邏輯或類來處理這樣的事情..在我看來... – MethodMan

+0

我問我是否缺少API的一部分 - 我需要監聽的事件,更改的返回屬性等。顯然,我無法存儲我的用戶名和密碼以傳遞給Box未受監控應用的登錄網頁。 – Quicksilver

+0

如果該應用程序是一個控制檯應用程序..你可以在App.Config文件中存儲用戶名和密碼,並讓該部分加密你試過 – MethodMan

回答

1

我想明白了,儘管解決方案看起來有些尷尬。

基本上,如果有必要,您總是必須準備好創建另一個auth會話。你創建一個auth會話,看看它是否有效,如果不是,創建第二個真實的。您會測試該通過捕獲兩個事件:

boxClient.Auth.SessionAuthenticated += Auth_SessionAuthenticated; 
boxClient.Auth.SessionInvalidated += Auth_SessionInvalidated; 

對我來說,這似乎是愚蠢的 - 我跑我的應用程序次/天,所以我只想每次刷新我的令牌。所以我總是創建兩個:

 var config = new BoxConfig(CLIENT_ID, CLIENT_SECRET, new Uri(RedirectURI)); 

     // Prior to this code snippet, I grabbed my starter access & refresh tokens from where I stored them in our db. 
     var auth = new OAuthSession(InitialToken, RefreshToken, 3600, "bearer"); 
     var client = new BoxClient(config, auth); 

     /// Try to refresh the access token 
     var realAuth = await client.Auth.RefreshAccessTokenAsync(auth.AccessToken); 
     /// Create the client again 
     var realClient = new BoxClient(config, realAuth); 

     //going to just log/update tokens every time. This only runs 1x/day, so should be no harm. 
     LogNewTokens(realAuth.AccessToken, realAuth.RefreshToken); 

然後我使用「realClient」作爲剩餘的Box請求。

回想起來,我可能會更快地解除代碼,將這些請求直接發佈到Box並解析返回的JSON。我希望有一個很好的包裝對象,可以自動爲我更新我的令牌,連接並使新的包容易獲得。我認爲他們可以在C#SDK上做得更好。

相關問題