PAYATHON 2026

APS Automation API 能否用无 Revit 许可的 SSA 创建云模型?

数据小陈

结论

不能仅凭 APS Automation API 的付费使用资格,绕过 SaveAsCloudModel 所需的云模型权益。对于非工作共享云模型,执行保存操作的身份需要具备 Cloud Models for Revit 权益。Autodesk 说明,该权益包含在 Revit 或 AEC Collection 中;SSA 获得令牌后,仍需具备这项权益。Autodesk 云模型授权说明

不过,也不能据此认定所有场景都必须额外购买一份独立 Revit 许可证。应先确认目标是非工作共享云模型还是 Revit Cloud Worksharing 模型,再检查对应权益和现有订阅能否分配给执行账号。

为什么换成有许可的账号就能成功?

Revit Automation 的云模型集成通过 WorkItem 参数 adsk3LeggedToken 建立用户上下文。执行云模型 API 时,使用的是该令牌所代表的身份。Revit Cloud Model Integration

执行操作需要通过身份认证,并具备相应的产品权益和项目权限。SaveAsCloudModel 的官方 API 文档明确列出,缺少操作权益或用户无权访问目标云项目,都可能触发 RevitServerUnauthorizedException。SaveAsCloudModel API 文档

题目中,同一个 SSA 在分配 Revit 许可后保存成功。这一对照结果支持此前缺少云模型权益的判断,但不能证明所有模型类型都只能通过独立 Revit 订阅获得授权。

无界面创建云模型有哪些方案?

方案一:为 SSA 分配目标模型所需的权益

如果这里的 SSA 指 Autodesk 的 Secure Service Account,可以使用私钥和 JWT 完成服务间认证,避免依赖人员登录。Autodesk 的 SSA 正式发布说明指出,通过 RCM API 使用 SSA 访问 Revit Cloud Worksharing 模型时,读取需要 BIM Collaborate,读写需要 BIM Collaborate Pro。使用 SSA 进行无人值守认证,仍需满足相应的产品权益要求。SSA 正式发布说明

建议按以下顺序配置:

  1. 确认模板是否启用了 worksharing,以及最终是否需要多人协同编辑。
  2. 非工作共享云模型检查 Cloud Models for Revit 权益;工作共享云模型检查 Revit Cloud Worksharing 对应的读写权益。
  3. 将应用接入目标 hub,将 SSA 加入项目,并授予目标文件夹所需的写入权限。
  4. 使用 SSA 的令牌执行保存任务,分别记录认证失败、权益不足和项目权限不足的错误。

如果希望通过 BIM Collaborate Pro 避免分配独立 Revit 许可,应先确认工作共享模型是否符合业务需求,再向 Autodesk 核实具体订阅和账号的分配方式。这条路径仍有相应的授权成本。

方案二:由已获许可的用户授权,后台维护令牌

如果主要困难是每次任务都需要人员提供令牌,可以实现 OAuth 的 refresh_token 流程。APS 官方示例展示了如何在后台刷新访问令牌并保存返回的新令牌。APS OAuth 认证示例

这种方式可以减少日常交互,但仍依赖该用户的授权、产品权益和项目权限。生产系统需要妥善保存令牌,并处理授权撤销或刷新失败后的重新授权,不能把它视为永久有效的无人值守凭据。

方案三:如果只需要交付 RVT 文件,改为普通文件上传

如果实际需求只是生成 .rvt 文件并存入 Autodesk Docs,可以评估先由 Automation 生成文件,再通过 Data Management API 上传的流程。

普通 RVT 上传不会自动完成 SaveAsCloudModel 所执行的云模型初始化。Autodesk 区分 Revit cloud model 和存放在云项目中的 RVT 文件,两者在 Revit 中的打开、链接和协作行为不同。因此,这种方式只适合文件交付需求,不能直接替代原生云模型创建。Revit 云模型与普通 RVT 文件的区别

SaveAsCloudModel 调用示例

在 Automation 已建立有效用户上下文、文档已创建或打开、目标身份具备必要权益与权限的前提下,可以调用:

using System;
using Autodesk.Revit.DB;

public static void SaveNewCloudModel(
    Document document,
    Guid accountId,
    Guid projectId,
    string folderId,
    string modelName)
{
    document.SaveAsCloudModel(
        accountId,
        projectId,
        folderId,
        modelName);
}

这段代码只展示保存调用,不包含模板创建、WorkItem 提交和令牌获取。调用前必须结束所有打开的事务;该方法也不能用于已是云模型的文档。参数和文档状态要求应以所用 Revit API 版本为准。SaveAsCloudModel 参数与限制

对于题目中的流程,优先采用具备相应云模型权益的 SSA。现有资料没有提供让无权益 SSA 通过其他令牌参数绕过保存授权的受支持方式。

备注:内容仅供参考。