有没有办法可以编程续订盒子刷新令牌



我正在编码一个每天在Windows 7上运行的控制台C#应用。没有用户交互。

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

我希望最终使用企业ID,但是我在公司网站中进行此操作,并且很难获得使用它的许可。因此,就目前而言,我只是使用登录名创建了一个应用程序,授权该应用程序并手动收到&存储我的刷新令牌。

我很难弄清楚如何在C#中管理刷新令牌。我在Java中看到一些使它看起来很容易的对象,但是我看不到相应的C#对象?60天后使用盒子登录网页在60天后,我必须手动重新授权我的应用程序吗?如果没有,我需要做什么才能检测我的刷新令牌已经改变,我该如何检索新的?

我也遇到了一些麻烦,因为它似乎随着最新的API发生了很多变化,每当我搜索代码时,它都来自几年前,现在已经过时了。

我弄清楚了,尽管解决方案似乎是一种clugey。

基本上,您始终必须准备好在必要时创建另一个验证会话。您创建一个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并解析JSON返回的代码可能会更快。我希望有一个不错的包装对象,可以自动为我更新我的令牌,连接并使新的名字容易获得。我认为他们可以在C#SDK中做得更好。

最新更新