存储 Autodesk-Forge 刷新令牌的最佳方式

Best Way to Store Autodesk-Forge Refresh Tokens

目前我正在使用 autodesk-forge 查看器和 fusion360 构建 Web 应用程序。我的项目类似于 this 教程,我只需要授权 m 帐户一次,然后用户就可以使用刷新令牌来查看我帐户中的模型。目前我正在使用 MySQL 来存储我的刷新令牌。我目前在 table 中只有一列和一行,每次生成新的刷新令牌时,它都会替换一行中的旧令牌。我刷新令牌的代码如下所示:

 $rToken = $_POST['Value'];
  $query = "UPDATE tblMachineViewerToken SET Value='$rToken'";

因此,每次生成新的刷新令牌时,table 中的一行都会更新。这是存储刷新令牌的合适方法吗,因为我有几个实例必须再次授权我的帐户。任何帮助深表感谢。干杯!

如果没有看到您的代码,很难知道问题可能是什么,但很可能您遇到了过期 refresh_token 或并发问题。在开始回答您的问题之前,我们假设您将 access_token 和 refresh_token 存储在数据库中。从安全角度来看,将单个 BIM360 用户的令牌共享给您的许多用户是危险的。这意味着您的所有用户都可以在您不知情的情况下以您的权限代表您访问您的数据,如果发生错误,您永远不知道谁做了什么。

回到您的问题,假设用户 A 和用户 B 同时访问您的应用程序(相差几毫秒);您的用户 A 的应用程序在执行刷新过程时检测到它需要刷新 access_token; userB 也访问您的应用程序,并且您的应用程序还检测到令牌需要刷新,因为 userA 刷新任务尚未完成。在这种情况下,由于 refresh_token 只能使用一次,因此其中一个用户刷新任务将 return 一个空标记,您将失去连接。您需要确保您的代码作为单例任务运行,并让所有其他请求等待该任务完成。

另一个简单的原因是给定的refresh_token只有14天有效,所以你需要确保至少每14天刷新一次access_token和refresh_token。