2017-02-21 76 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上做得更好。