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

Is there a way to programmatically renew a Box refresh token?

我正在编写一个控制台 C# 应用程序,它将 运行 每天 Windows 7。没有用户交互。

该应用使用 OAuth2 和最新 API/SDK.

将 CSV 文件简单地上传到 Box

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

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

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

我想出来了,虽然这个解决方案看起来有点笨拙。

基本上,您必须随时准备好在必要时创建另一个身份验证会话。您创建一个身份验证会话,查看它是否有效,如果不是,则创建第二个您真正使用的会话。您可以通过捕获两个事件来对此进行测试:

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);

然后我对其余的 Box 请求使用 "realClient"。

回想起来,如果我只提升将这些请求直接发布到 Box 并解析返回的 JSON 的代码,可能会更快。我希望有一个很好的包装器对象,它会自动为我更新我的令牌、连接并使新令牌易于使用。我认为他们可以使用 C# SDK 做得更好。