Создание приложения Viewer с URN из Autodesk A360

Я создал приложение для просмотра, которое использует двухстороннюю аутентификацию и отображает проект, который был загружен в мою корзину. Теперь вместо просмотра проекта в моем собственном сегменте я хотел бы иметь возможность просматривать проект, который уже был загружен в Autodesk A360.

Для этого я выполнил следующие шаги:

  • Реализована трехсторонняя аутентификация (учетная запись A360 с проектом и учетная запись, которая аутентифицируется, совпадают).
  • Получил доступ к концентратору, проекту и файлу, как описано в https://developer.autodesk.com/en/docs/data/v2/tutorials/download-file/.
  • Вместо того, чтобы скачивать проект и выгружать его в свою корзину, как описано в 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 должен быть таким же, который A360 использует для своего собственного средства просмотра.

При просмотре проекта с URN в моем собственном приложении на сетевой консоли отображается следующее сообщение об ошибке: Сообщение об ошибке

При просмотре конкретного запроса возвращается следующий ответ:  Response

Я также убедился, что преобразованный URN равен URN, который использует A360. Для этого я сравнил его с ответом A360:  URN

Так как средство просмотра работает в A360, я хотел бы знать, можно ли просматривать проект в A360 в моем собственном приложении (сегмент уже существует для средства просмотра A360, поэтому нет причин для повторения того же процесса создания сегмента и загрузка файла). Если можно использовать тот же проект с URN, то я также хотел бы знать, почему запрос неавторизован.

Если вам нужен дополнительный код, обязательно спросите.


person danrodi    schedule 15.06.2016    source источник


Ответы (3)


Вы можете посмотреть следующие три образца на GiHub, все три которых обращаются к моделям САПР на A360 и отображают их в средстве просмотра:

Пример 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

Удачи!

person Jeremy Tammik    schedule 15.06.2016
comment
Образцы 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"} - person danrodi; 15.06.2016
comment
Я вчера тоже видел это сообщение. Извини за это. спрошу у коллег. - person Jeremy Tammik; 15.06.2016
comment
Я исправил это вчера, очистив кеш и перезагрузив, но потребовалось несколько попыток. Надеюсь, это сработает лучше во время моей демонстрации Forge DevCon! - person Jeremy Tammik; 15.06.2016
comment
@danrodi: при создании ключа и секрета разработчика на портале разработчика необходимо указать URL-адрес обратного вызова. Затем в вашем коде OAuth вы должны указать тот же URL. Вы можете это проверить, пожалуйста? - person Augusto Goncalves; 15.06.2016
comment
@AugustoGoncalves Я указал URL-адрес обратного вызова, а также использовал тот же URL-адрес в моем коде OAuth. Вопрос только в том, приемлемо ли * для порта. - person danrodi; 15.06.2016
comment
Я полностью пропустил спецификацию порта в URL-адресе обратного вызова на странице регистрации приложения. - person Jeremy Tammik; 15.06.2016
comment
Какой у вас URL обратного вызова? - person Augusto Goncalves; 15.06.2016
comment
@JeremyTammik Я могу попробовать это, хотя я не использую порт по умолчанию и есть веб-диспетчер, который перенаправляет запросы в соответствии с используемым компьютером (чтобы избежать проблемы CORS с системой ERP). - person danrodi; 15.06.2016
comment
@AugustoGoncalves Тот же URL, с которого осуществляется доступ к моему приложению. - person danrodi; 15.06.2016
comment
@danrodi эта ошибка возникает, если обратный вызов не совсем такой, как указано при создании ключа. Можете ли вы поделиться некоторыми фрагментами кода? Возможно, возникла проблема с вашими конечными точками - person Augusto Goncalves; 15.06.2016
comment
@AugustoGoncalves URL-адрес обратного вызова выглядит примерно так http://www.example.com:*/*, а URL-адрес в коде выглядит так window.location.assign("https://developer.api.autodesk.com/authentication/v1/authorize?response_type=code&client_id=<...>&redirect_uri=" + "http%3A%2F%2Fwww.example.com%3A" + window.location.port + "%2Findex.html&scope=data:read"); - person danrodi; 15.06.2016
comment
@AugustoGoncalves developer.autodesk.com/en/docs/oauth / v2 / tutorials / create-app указывает, что в пути разрешены подстановочные знаки. Хотя в нем также указано, что использование подстановочных знаков не допускается в имени хоста, номер порта не должен напрямую связываться с именем хоста. - person danrodi; 15.06.2016
comment
Позвольте нам продолжить это обсуждение в чате. - person danrodi; 16.06.2016

После сравнения моего решения с приложением Аугусто Гонсалвеса на 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 файле примера кода выше.

person danrodi    schedule 17.06.2016
comment
Спасибо! Думаю, это нужно задокументировать! - person Strnm; 10.07.2016
comment
Какая часть моего ответа вам непонятна? Есть веская причина, по которой это НЕ задокументировано. Вы НЕ должны использовать подход с использованием пространства имен ACM, который вы описываете, потому что ОН ПРЕКРАТИТЬ РАБОТУ В НЕКОТОРЫЙ МОМЕНТ В БУДУЩЕМ. Позвольте мне повторить то, что я сказал ранее: у меня есть подтверждение от разработки, что вам не следует использовать заголовки ACM или полагаться на урну WIPDM для непосредственной загрузки вашего просматриваемого объекта. Мы добавим некоторую логику непосредственно в производный сервис, чтобы абстрагироваться от нее и позволить вам это сделать. На данный момент предпочитаю использовать URN хранилища из версии элемента A360 и размещать настраиваемое задание svf - person Philippe; 25.07.2016

У меня есть подтверждение от группы разработчиков, что вам не следует использовать заголовки ACM или полагаться на урну WIPDM для непосредственной загрузки вашего просматриваемого объекта. Это перестанет работать в какой-то момент в будущем. Мы добавим некоторую логику непосредственно в производный сервис, чтобы абстрагироваться от нее и позволить вам это сделать.

В настоящий момент, к сожалению, предпочитаю использовать URN хранилища из версии элемента A360 и размещать настраиваемое задание 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
person Philippe    schedule 12.07.2016