繁体   English   中英

Autodesk Forge Viewer 中的令牌续订

[英]Token renewal in Autodesk Forge Viewer

呈现查看器时,需要令牌才能使用其 URN 访问 model 数据。

我目前正在做的是:

  • 每次加载 HTML 页面时:调用认证端点获取令牌
  • 将此令牌提供给查看者

为此,我将client_idclient_secret像这样放在 JS 中(代码基于步骤 1:准备您的 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中,声明了

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

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);
    }
}

我不明白我们在这里谈论的是哪个后端,因为我们只有 static HTML/JS。 您能否提供一个此类令牌更新 function 的示例,它应该位于哪里?

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

多谢你们。

关于令牌到期,我认为 getAccessToken function 会自动更新令牌,因此您只需要提供 function 即可按照评论中的说明获取新令牌。

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

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

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

锻造入门

您还可以查看Autodesk-Forge Github ,您可以在其中找到许多不同的示例。

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

To create a simple server using .NET Core, Node.js, Java, PHP, or Go, go to the https://learnforge.autodesk.io/#/environment/setup/2legged tutorial and select the language of your choice.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM