我正在编写一个控制台c#app,它将在Windows 7上每天运行。没有用户交互。
该应用只需使用OAuth2和最新的API / SDK将CSV上传到Box。
我希望最终使用企业ID,但我在公司网站上这样做,并且很难获得使用它的许可。所以现在,我只是用我的登录创建了一个应用程序,授权了应用程序,并手动收到了&存储了我的刷新令牌。
我无法弄清楚如何在C#中管理刷新令牌。我在java中看到一些使它看起来很容易的对象,但是我没有看到相应的C#对象?使用Box登录网页60天后是否必须手动重新授权我的申请?如果没有,我需要做什么来检测我的刷新令牌是否已经改变,以及如何检索新的令牌?
我也遇到了一些麻烦,因为看起来很多对象都是用最新的API改变的,每当我搜索代码时,它都是几年前发现的,现在它已经过时了。
答案 0 :(得分:1)
我想出来了,虽然这个解决方案看起来很糟糕。
基本上,如果需要,您必须准备好创建另一个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做得更好。