Рабочий процесс API
Следует стандартной последовательности API Microsoft Graph для загрузки приложений Win32:
- (Создать Win32LobApp)
Код: Выделить всё
POST /deviceAppManagement/mobileApps - (Создать версию контента)
Код: Выделить всё
POST /mobileApps/{id}/contentVersions - (Создать запись файла)
Код: Выделить всё
POST /contentVersions/{version}/files - Подождите URI хранилища Azure (опрос до тех пор, пока azureStorageUriRequestSuccess)
- в URI хранилища Azure (загрузить файл .intunewin)
Код: Выделить всё
PUT - (файл фиксации) (возвращает HTTP 200)
Код: Выделить всё
POST /files/{fileId}/commit
- Шаги 1–5: все успешно с правильными ответами HTTP 201/200.
- Шаг 6: API фиксации возвращает HTTP 200 OK
- Конечный результат: uploadState: commitFileFailed
Структура полезной нагрузки FileEncryptionInfo
Код: Выделить всё
{
"fileEncryptionInfo": {
"encryptionKey": "base64-encoded-32-bytes",
"macKey": "base64-encoded-32-bytes",
"initializationVector": "base64-encoded-16-bytes",
"mac": "base64-encoded-32-bytes",
"profileIdentifier": "ProfileVersion1",
"fileDigest": "base64-encoded-32-bytes",
"fileDigestAlgorithm": "SHA256",
"@odata.type": "microsoft.graph.fileEncryptionInfo"
},
"size": 3064190,
"name": "example-installer.intunewin"
}
Проверка выполнена
Проверка полей: все поля base64 декодируются до необходимой длины в байтах Microsoft:- : 16 байт
Код: Выделить всё
initializationVector - : 32 байта
Код: Выделить всё
mac - : 32 байта
Код: Выделить всё
macKey - : 32 байта
Код: Выделить всё
encryptionKey - : 32 байта
Код: Выделить всё
fileDigest
Метаданные шифрования: извлечены непосредственно из .intunewin Detection.xml
Azure Storage: правильные заголовки, проверка MD5, успешно загрузить с соответствующим ETag
Соответствие API: точное соответствие документации Microsoft Graph API
Сведения о среде
- Версия API: Microsoft Graph v1.0
- Аутентификация: Регистрация приложения с помощью DeviceManagementApps.ReadWrite.All
- Метод загрузки: одиночный PUT (файлы < 4 МБ в соответствии с рекомендациями Microsoft).
- Формат файла: пакеты .intunewin, созданные с помощью официального инструмента Microsoft.
Требуются ли дополнительные заголовки или поля для запроса на фиксацию, не задокументированы?
Что я пробовал
- Проверено, что все поля шифрования соответствуют требованиям Microsoft к двоичной длине
- Подтверждено, что структура файла .intunewin соответствует формату Microsoft
- Протестировано с различными размерами и типами файлов
- Добавлены задержки для внутренней обработки
- Проверена целостность загрузки в хранилище Azure с контрольными суммами MD5
Спасибо за любую помощь!