【问题标题】:Best Way to Store Autodesk-Forge Refresh Tokens存储 Autodesk-Forge 刷新令牌的最佳方式
【发布时间】:2020-10-27 17:23:22
【问题描述】:

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

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

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

【问题讨论】:

    标签: php mysql database autodesk-forge autodesk-viewer


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢@cyrille 的帮助!这就是可能出错的地方。关于如何确保其他请求在执行前等待第一个任务完成的任何想法?
    • @matthew-vidovic - 最简单的实现(适用于所有语言)是实现信号量。
    • 如果我从 javascript 向 php 和 sql 发送和接收令牌,我的信号量应该是 php 还是 javascript? @cyrille
    • 请你看看我的新问题@cyrille stackoverflow.com/questions/62781249/…
    猜你喜欢
    • 2019-10-25
    • 2016-12-20
    • 2023-03-19
    • 1970-01-01
    • 2017-08-16
    • 2020-09-17
    • 2023-03-24
    • 2019-09-09
    • 2023-03-28
    相关资源
    最近更新 更多