Autodesk Forge Viewer 中的令牌续订
Posted
技术标签:
【中文标题】Autodesk Forge Viewer 中的令牌续订【英文标题】:Token renewal in Autodesk Forge Viewer 【发布时间】:2021-08-21 17:29:36 【问题描述】:在渲染 Viewer 时,需要令牌才能通过其 URN 访问模型数据。
我目前正在做的是:
每次加载 html 页面时:调用身份验证端点以获取令牌 将此令牌提供给查看者为此,我将client_id
和client_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 匹配?