【问题标题】:Creating a viewer application with an URN from Autodesk A360使用 Autodesk A360 中的 URN 创建查看器应用程序
【发布时间】:2016-10-16 13:16:56
【问题描述】:

我创建了一个查看器应用程序,它使用 2-legged 身份验证并显示已上传到我自己的存储桶的项目。现在,我不想查看自己存储桶中的项目,而是希望能够查看已上传到 Autodesk A360 的项目。

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

因此,转换后的 URN 应该与 A360 用于其自己的查看器的 URN 相同。

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

查看具体请求时,返回如下响应:

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

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

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

【问题讨论】:

    标签: oauth autodesk-data-management autodesk-viewer


    【解决方案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 分钟演示记录:

    https://www.youtube.com/watch?v=bDI5YX7PDP8

    祝你好运!

    【讨论】:

    • 数据管理 API 示例和模型衍生 API 示例提供以下错误消息:{"developerMessage":"The authorization code/refresh token is expired or invalid/redirect_uri must have the same value as in the authorization request.","userMessage":"","errorCode":"AUTH-004","more info":"http://developer-stg.api.autodesk.com/documentation/v1/errors/AUTH-004"}
    • 我昨天也看到了这条消息。对于那个很抱歉。我会问我的同事。
    • 我昨天通过清除缓存并重新加载来修复它,但尝试了几次。我希望它在我的 Forge DevCon 演示期间效果更好!
    • @danrodi:在开发者门户创建开发者密钥和秘密时,您需要指定“回调 URL”。然后,在您的 OAuth 代码中,您必须使用相同的 URL。你能检查一下吗?
    • @AugustoGoncalves 我指定了回调 URL,并且还在我的 OAuth 代码中使用了相同的 URL。唯一的问题是,端口的 * 是否可以接受。
    【解决方案2】:

    在将我的解决方案与 https://github.com/Developer-Autodesk/data.management.api-nodejs-sample 的 Augusto Goncalves 申请进行比较后,我终于设法解决了问题。

    虽然此方法返回正确的 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 文件中的解决方案。

    【讨论】:

    • 谢谢!我认为这应该记录在案!
    • 我上面回答的哪一部分你不清楚?没有记录是有充分理由的。您不应该使用您描述的 ACM 命名空间方法,因为它会在未来的某个时候停止工作。让我重复一下我之前所说的话:我已经从开发人员那里得到确认,您不应该使用 ACM 标头或依赖 WIPDM urn 来直接加载您的可视项。我们将直接在衍生服务中添加一些逻辑来抽象它并允许您这样做。目前更喜欢使用 A360 项目版本中的存储 URN 并发布自定义 svf 作业
    【解决方案3】:

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

    不幸的是,目前更喜欢使用 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
    

    【讨论】:

      猜你喜欢
      • 2018-10-10
      • 2019-05-10
      • 2021-12-30
      • 2019-02-27
      • 2018-05-11
      • 1970-01-01
      • 2022-08-14
      • 2017-12-31
      • 2021-11-12
      相关资源
      最近更新 更多