有没有办法以编程方式续订Box刷新令牌?

时间:2017-02-21 19:05:18

标签: c# .net windows box

我正在编写一个控制台c#app,它将在Windows 7上每天运行。没有用户交互。

该应用只需使用OAuth2和最新的API / SDK将CSV上传到Box。

我希望最终使用企业ID,但我在公司网站上这样做,并且很难获得使用它的许可。所以现在,我只是用我的登录创建了一个应用程序,授权了应用程序,并手动收到了&存储了我的刷新令牌。

我无法弄清楚如何在C#中管理刷新令牌。我在java中看到一些使它看起来很容易的对象,但是我没有看到相应的C#对象?使用Box登录网页60天后是否必须手动重新授权我的申请?如果没有,我需要做什么来检测我的刷新令牌是否已经改变,以及如何检索新的令牌?

我也遇到了一些麻烦,因为看起来很多对象都是用最新的API改变的,每当我搜索代码时,它都是几年前发现的,现在它已经过时了。

1 个答案:

答案 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做得更好。