Oauth 使用Autodesk A360中的URN创建查看器应用程序

Oauth 使用Autodesk A360中的URN创建查看器应用程序,oauth,autodesk-data-management,autodesk-viewer,Oauth,Autodesk Data Management,Autodesk Viewer,我创建了一个查看器应用程序,它使用两条腿的身份验证,并显示已上载到我自己的bucket中的项目。现在,我希望能够查看已上载到Autodesk A360的项目,而不是在我自己的bucket中查看该项目 为此,我已完成以下步骤: 实施了三条腿身份验证(项目的A360帐户和正在验证的帐户相同) 访问了中心、项目和文件,如中所述 没有下载项目并将其上传到我自己的bucket(如中所述),而是获得了identificator (urn:adsk.wipprod:fs.file:vf.6bVr4EVDSa

我创建了一个查看器应用程序,它使用两条腿的身份验证,并显示已上载到我自己的bucket中的项目。现在,我希望能够查看已上载到Autodesk A360的项目,而不是在我自己的bucket中查看该项目

为此,我已完成以下步骤:

  • 实施了三条腿身份验证(项目的A360帐户和正在验证的帐户相同)
  • 访问了中心、项目和文件,如中所述
  • 没有下载项目并将其上传到我自己的bucket(如中所述),而是获得了identificator (
    urn:adsk.wipprod:fs.file:vf.6bVr4EVDSaOpykczeQYR2Q?version=1
    )并将其转换为URL友好的Base64(
    dxjuomfkc2sub2jqzwn0czpvcy5vymply3q6bxktynvja2v0l215lwf3zxnvwbwbwwwwwwutzm9yz2utzmlsz5ydnq=
因此,转换后的URN应与A360用于其自身查看器的URN相同

在我自己的应用程序上使用URN查看项目时,网络控制台显示以下错误消息:

查看特定请求时,将返回以下响应:

我还确保转换后的URN与A360使用的URN相同。为此,我将其与A360的响应进行了比较:

因此,由于查看器在A360中工作,我想知道A360中的项目是否也可以在我自己的应用程序中查看(A360查看器已经存在bucket,因此没有理由重复相同的bucket创建和文件上载过程)。 如果可以使用与URN相同的项目,那么我还想知道为什么该请求未经授权


如果您需要任何其他代码,请务必询问。

您可以在GiHub上查看以下三个示例,所有三个示例都可以访问A360上的CAD模型,并在查看器中显示它们:

数据管理APIP示例:

模型衍生API样本:

实时往返BIM编辑器:

roomedit3dv2往返锻造BIM edi提供了其工作的证明,8分钟演示记录:


祝你好运

在将我的解决方案与Augusto Goncalves在的应用程序进行比较后,我终于设法解决了这个问题

  • 不像中所述那样下载项目并将其上传到我自己的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*/);

使用此解决方案需要对查看器的实例化进行更改。我没有按照中所述进行更改,而是将其更改为上面示例代码的
index.js
文件中的解决方案。

我已从开发团队得到确认,您不应使用ACM头或依赖WIPDM urn来加载di这将在将来某个时候停止工作。我们将直接在派生服务中添加一些逻辑来抽象它,并允许您这样做

不幸的是,目前,我们更倾向于使用A360项目版本的存储URN,并发布一个定制svf作业,该作业将生成一组您可以依赖的新视图

你可以在我的文章中看到一个具体的例子


数据管理API示例和模型衍生API示例给出以下错误消息:
{“developerMessage”:“授权代码/刷新令牌已过期或无效/重定向uri必须与授权请求中的值相同。”,“userMessage”:“errorCode”:“AUTH-004”,“更多信息”:"http://developer-stg.api.autodesk.com/documentation/v1/errors/AUTH-004"}
我昨天也看到了这条消息。对此我很抱歉。我会问我的同事。我昨天通过清除缓存和重新加载修复了它,但尝试了几次。我希望在我的Forge DevCon演示中效果更好!@danrodi:在开发人员门户创建开发人员密钥和机密时,需要指定一个“回调URL”"。然后,在您的OAuth代码中,您必须使用相同的URL。您能检查一下吗?@AugustoGoncalves我指定了回调URL,并且在我的OAuth代码中也使用了相同的URL。唯一的问题是,*for port是否可以接受。谢谢!我认为这应该被记录下来!我上面回答的哪一部分您不清楚?这是一个很好的理由是没有文档记录的。您不应该使用您描述的ACM命名空间方法,因为它将在将来某个时候停止工作。让我重复一下我之前说过的话:我已经从开发中得到确认,您不应该使用ACM标头或依赖WIPDM urn直接加载您的可视文件。我们将添加一些逻辑直接在衍生服务中提取并允许您这样做。目前,您更喜欢使用A360项目版本的存储URN并发布自定义svf作业
//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