Autodesk Forge Viewer 中的令牌续订

Posted

技术标签:

【中文标题】Autodesk Forge Viewer 中的令牌续订【英文标题】:Token renewal in Autodesk Forge Viewer 【发布时间】:2021-08-21 17:29:36 【问题描述】:

在渲染 Viewer 时,需要令牌才能通过其 URN 访问模型数据。

我目前正在做的是:

每次加载 html 页面时:调用身份验证端点以获取令牌 将此令牌提供给查看者

为此,我将client_idclient_secret 像这样放在JS 中(代码基于Step 1: Prepare your HTML):

fetch('https://developer.api.autodesk.com/authentication/v1/authenticate',

    method: 'POST',
    headers: 
        'Content-Type': 'application/x-www-form-urlencoded'
    ,
    body: new URLSearchParams(
        'client_id': '*****',
        'client_secret': '*****',
        'grant_type': 'client_credentials',
        'scope': 'viewables:read'
    )
)
.then(res => res.json())
.then(value => 
    var viewer;
    var options = 
        env: 'AutodeskProduction',
        accessToken: value.access_token
    ;
    var documentId = 'urn:*****';
    Autodesk.Viewing.Initializer(options, function onInitialized()
        Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess, onDocumentLoadFailure);
    );
);

这显然是一件可怕的事情,因为秘密暴露在客户端。

Step 2: Token expiration 中声明

开发人员可以(并且应该)提供一个可以[从后端]获取新访问令牌的函数

var options = 
    env: 'AutodeskProduction',
    getAccessToken: function(onGetAccessToken) 
        //
        // TODO: Replace static access token string below with call to fetch new token from your backend
        // Both values are provided by Forge's Authentication (OAuth) API.
        //
        // Example Forge's Authentication (OAuth) API return value:
        // 
        //    "access_token": "<YOUR_APPLICATION_TOKEN>",
        //    "token_type": "Bearer",
        //    "expires_in": 86400
        // 
        //
        var accessToken = '<YOUR_APPLICATION_TOKEN>';
        var expireTimeSeconds = 86400;
        onGetAccessToken(accessToken, expireTimeSeconds);
    

我不明白我们在这里谈论的是哪个后端,因为我们只有静态 HTML/JS。您能否提供一个此类令牌更新功能的示例以及它应该驻留在哪里?

是否有运行时更新令牌,即使长时间没有人访问 HTML 页面?

谢谢大家。

【问题讨论】:

【参考方案1】:

关于令牌过期,我认为 getAccessToken 函数会自动更新令牌,因此您只需要提供一个函数来获取新令牌,如评论中所述。

对于后端,可能有一些方法可以只使用 html/js 并隐藏您的凭据,但这不是推荐的方式。

我从 Forge 团队制作和看到的所有 Forge 开发人员都是用后端制作的(NodeJS、C#、php ...您可以选择自己喜欢的语言)

您可以按照本教程使用 NodeJS 展示这一点:

Forge Getting Started

您也可以查看Autodesk-Forge Github,在那里您可以找到很多不同的示例。

【讨论】:

【参考方案2】:

在构建 Forge 应用程序时,您通常必须实现基本后端,至少用于生成访问令牌(而不是 - 正如您正确指出的那样 - 直接从客户端请求令牌并公开客户端 ID 和机密) .

要使用 .NET Core、Node.js、Java、PHP 或 Go 创建简单服务器,请转至 https://learnforge.autodesk.io/#/environment/setup/2legged 教程并选择您选择的语言。

【讨论】:

以上是关于Autodesk Forge Viewer 中的令牌续订的主要内容,如果未能解决你的问题,请参考以下文章

Autodesk Forge Viewer 适合查看纵向/横向

Autodesk Forge Viewer 中的三个 JS 限制变换控制运动

将模型从 Autodesk Viewer 加载到 Forge Viewer

如何将 Autodesk 模型衍生 API 元数据中的 objectids 与 Forge Viewer 模型 dbids 匹配?

在 Autodesk Forge Viewer 中对齐坐标系

如何在 Typescript 中更改 Autodesk Forge Viewer 标记扩展中的编辑模式?