【问题标题】:Token renewal in Autodesk Forge ViewerAutodesk Forge Viewer 中的令牌续订
【发布时间】:2023-03-19 23:30:02
【问题描述】:

在渲染 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 页面?

谢谢大家。

【问题讨论】:

    标签: javascript autodesk-forge autodesk-viewer


    【解决方案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 教程并选择您选择的语言。

      【讨论】:

        猜你喜欢
        • 2020-05-06
        • 2021-05-13
        • 2021-11-26
        • 2020-01-16
        • 2018-06-11
        • 2020-05-15
        • 2020-09-25
        • 2021-01-16
        • 2020-10-30
        相关资源
        最近更新 更多