目前,我正在使用autodesk forge查看器和fusion360构建一个web应用程序。我的项目类似于this教程,我只需授权m帐户一次,然后用户可以使用刷新令牌来查看我的帐户中的模型。目前,我正在使用MySQL来存储我的刷新标记。我的表中目前只有一列和一行,每次生成新的刷新令牌时,它都会替换一行中的旧令牌。我刷新令牌的代码如下所示:
$rToken = $_POST['Value'];
$query = "UPDATE tblMachineViewerToken SET Value='$rToken'";
因此,每次生成新的刷新令牌时,都会更新表中的一行。这是存储刷新令牌的适当方式吗,因为我有几个实例,我必须再次授权我的帐户。任何帮助都是非常感谢的。干杯!
发布于 2020-07-07 23:38:53
如果看不到代码,就很难知道问题是什么,但很可能是refresh_token过期或并发问题。在回答您的问题之前,让我们假设您在数据库中存储了access_token和refresh_token。从安全角度来看,将单个BIM360用户的令牌共享给多个用户是很危险的。这意味着你的所有用户都可以在你不知道的情况下用你的权限访问你的数据,如果发生了什么错误,你永远不会知道谁做了什么。
回到您的问题上,假设userA和userB同时访问您的应用程序(相差几毫秒);您的userA应用程序在执行刷新过程时检测到它需要刷新access_token;userB也访问您的应用程序,并且您的应用程序也检测到令牌需要刷新,因为userA刷新任务尚未完成。在这种情况下,因为一个refresh_token只能使用一次,所以其中一个用户刷新任务将返回一个空令牌,您将丢失连接。您需要确保您的代码作为单例任务运行,并让所有其他请求等待该任务完成。
另一个简单的原因是,给定的refresh_token只有14天有效,因此您需要确保至少每14天刷新一次access_token和refresh_token。
https://stackoverflow.com/questions/62775489
复制相似问题