【发布时间】:2023-03-19 23:30:02
【问题描述】:
在渲染 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);
});
});
这显然是一件可怕的事情,因为秘密暴露在客户端。
开发人员可以(并且应该)提供一个可以[从后端]获取新访问令牌的函数
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