我创建了一个使用两条腿身份验证的查看器应用程序,并显示已上传到我自己的存储桶的项目。现在我不想在自己的桶中查看项目,而是希望能够查看已经上传到Autodesk A360的项目。
为此我完成了以下步骤:
urn:adsk.wipprod:fs.file:vf.6bVr4EVDSaOpykczeQYR2Q?version=1
)来自文件请求的结果,并将其转换为对URL友好的Base64(dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bXktYnVja2V0L215LWF3ZXNvbWUtZm9yZ2UtZmlsZS5ydnQ=
)。因此,转换后的URN应与A360用于其自己的查看器相同。
在我自己的应用程序中使用URN查看项目时,网络控制台显示以下错误消息:
我还确保转换后的URN等于A360正在使用的URN。为此,我将其与A360的响应进行了比较:
因此,当观众在A360工作时,我想知道A360中的项目是否也可以在我自己的应用程序中查看(A360查看器已经存在该存储桶,所以没有理由重复相同的过程存储桶创建和上传文件)。 如果可以使用与URN相同的项目,那么我也想知道为什么请求是未经授权的。
如果您需要任何其他代码,请务必询问。
答案 0 :(得分:1)
您可以在GiHub上查看以下三个样本,这三个样本都在A360上访问CAD模型并在查看器中显示:
数据管理APIP样本:https://github.com/Developer-Autodesk/data.management.api-nodejs-sample
模型衍生API示例:https://github.com/Developer-Autodesk/model.derivative.api-nodejs-sample
实时往返BIM编辑器:https://github.com/jeremytammik/model.derivative.api-nodejs-sample-roomedit3d
它的工作原理由roomedit3dv2往返Forge BIM edi提供,8分钟演示录制:
祝你好运!答案 1 :(得分:1)
将我的解决方案与Augusto Goncalves在https://github.com/Developer-Autodesk/data.management.api-nodejs-sample的申请进行比较后,我终于设法解决了这个问题。
- 如https://developer.autodesk.com/en/docs/data/v2/tutorials/app-managed-bucket/所述,不是下载项目并将其上传到我自己的存储桶,而是从文件请求的结果中获取标识符(
urn:adsk.wipprod:fs.file:vf.6bVr4EVDSaOpykczeQYR2Q?version=1
)并将其转换为URL友好的Base64(dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bXktYnVja2V0L215LWF3ZXNvbWUtZm9yZ2UtZmlsZS5ydnQ=
)。
虽然此方法返回正确的URN,但除了URN之外,还必须将acmsession
添加到请求中。从上面的示例代码中,我设法对以下请求进行反向工程:
curl -X 'POST' \
-H "Authorization: Bearer $token" -H 'Content-Type: application/json' \
-v 'https://developer.api.autodesk.com/oss-ext/v1/acmsessions' -d \
'{
"application": "autodesk",
"x-ads-acm-check-groups": "true",
"x-ads-acm-namespace": "WIPDM"
}'
此请求的结果返回一个代码,该代码必须添加到URN。它应该添加到被调用的方法中,而不是将其添加到请求URL的末尾:
viewer.load(doc.getViewablePath(geometryItems[0]), null, null, null, doc.acmSessionId /*session for DM*/);
使用此解决方案需要对查看器的实例化进行更改。我没有像https://developer.autodesk.com/en/docs/viewer/v2/tutorials/basic-viewer/中所描述的那样执行此操作,而是将其更改为上面示例代码的index.js
文件中的解决方案。
答案 2 :(得分:1)
我已得到开发团队的确认,您不应使用ACM标头或依赖WIPDM网址直接加载您的可见广告。这将在未来的某个时候停止工作。我们将在衍生服务中直接添加一些逻辑来抽象它,并允许您这样做。
目前不幸的是,我更喜欢使用A360项目版本中的存储URN并发布一个自定义的svf作业,它将生成一组你可以信赖的新视图。
您可以在我的forge sample
中查看具体示例//pick the last version by default
var version = item.versions[ item.versions.length - 1 ]
var storageUrn = window.btoa(
version.relationships.storage.data.id)
// !IMPORTANT: remove all padding '=' chars
// not accepted by the adsk services
storageUrn = storageUrn.replace(new RegExp('=', 'g'), '')
var urn = version.relationships.derivatives.data.id
console.log('A360 URN: ' + urn) // -> just for info
console.log('Storage URN: ' + storageUrn) // -> use this URN to POST svf and trigger translation