Как отправить команду MDM DeviceLock с помощью java

Я новичок в разработке IOS MDM с использованием службы APNs. Мы разрабатываем MDM для ios, и он находится в начальной стадии. Недавно у нас была создана учетная запись разработчика для Apple. Я просмотрел множество веб-сайтов и ссылок, но до сих пор не уверен, как отправить команду на устройство iOS. Пройдясь по приведенному ниже форуму, я понял, что нам нужно сначала проверить состояние устройства, а затем отправить команды на устройство. Отправка полезных данных mdm

Мой вопрос, как это сделать. Я не нашел ни одного фрагмента кода на Java, который мы фактически используем для отправки команды типа «DeviceLock» на устройство ios. Может ли кто-нибудь помочь мне с небольшим фрагментом Java для моей работы, чтобы я мог использовать тот же код для применения политик к устройствам.

Пожалуйста, помогите .. Спасибо за чтение.


person Samreen    schedule 23.07.2014    source источник
comment
Добро пожаловать в stackoverflow.com. Рекомендуется пройти через stackoverflow.com/help/how-to-ask.   -  person Nagama Inamdar    schedule 23.07.2014
comment
Вы завершили реализацию. Можете ли вы предложить мне, как сервер взаимодействует с устройством и устройством с сервером в форме запроса. Это означает, в какой форме вы отправляете команду с сервера и как вы проверяете, что команда выполнена и отправляете обратная связь с устройством.   -  person Imran    schedule 25.09.2014
comment
@Imran: Здравствуйте, извините за поздний ответ. Предполагая, что вы завершили регистрацию устройства, отвечая на ваши вопросы. Пожалуйста, найдите ниже мои комментарии в Updated.   -  person Samreen    schedule 29.09.2014


Ответы (2)


Обновлено:

  1. Чтобы отправить любую команду на устройство, нам сначала нужно установить профиль MDM в профили устройства, которые будут содержать URL-адрес сервера, который будет использоваться устройством для опроса команд всякий раз, когда устройство получает push-уведомление.

  2. См. http://media.blackhat.com/bh-us-11/Schuetz/BH_US_11_Schuetz_InsideAppleMDM_WP.pdf, чтобы получить подробную информацию о регистрации, также см. раздел «Отправка push-уведомлений» и разделы, следующие за ним по приведенной выше ссылке, где приведены подробные сведения о командах устройства.

  3. Чтобы отправить push-уведомление, нам нужен push-сертификат apns, который мы можем создать на портале идентификации Apple. ">http://www.softhinker.com/in-the-news/iosmdmvendorcsrsigning

  4. Для mdm мы отправляем полезную нагрузку push-уведомления в APN как {mdm : "PushMagicToken-of-device"}

  5. Когда устройство получает push-уведомление, оно свяжется с URL-адресом сервера mdm для выполнения команды.

Отвечая на ваши вопросы: (P.S. Использовал Java для общения)

Q1. "Можете ли вы предложить мне, как сервер взаимодействует с устройством и устройство с сервером в форме запроса"

Ответ: Устройство будет взаимодействовать с сервером, когда получит push-уведомление от APN. Он свяжется с URL-адресом ключа ServerUrl, который вы предоставляете в полезной нагрузке mdm.

Это тип метода запроса PUT, устройство отправляет статус Idle на сервер в формате plist.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Status</key>
<string>Idle</string>
<key>UDID</key>
<string> [ redacted ] </string>
</dict>
</plist>

Вся связь с устройством осуществляется с использованием Plist (формат списка свойств), устройство легко понимает этот формат.

Q2: "Это означает, в какой форме вы отправляете команду с сервера и как вы проверяете выполнение команды и отправляете ответ на устройство"

Сервер тоже отправляет команду на устройство в виде plist. Например: Ниже приведен plist, отправленный для команды DeviceLock с моего сервера mdm, когда устройство отправляет ответ о статусе Idle.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Command</key>
        <dict>
            <key>RequestType</key>
            <string>DeviceLock</string>
        </dict>
        <key>CommandUUID</key>
        <string>ph_mdm_command_uuid</string>
    </dict>
</plist>

Обратите внимание: у каждой команды есть поле CommandUUID, которое мы можем использовать для проверки текущих команд на стороне сервера, оно поддерживает текущий сеанс. Какую бы команду мы ни отправляли на устройство с CommandUUID, устройство возвращает статус этой команды с тем же самым CommandUUID.

Таким образом, в ответ на DeviceLock Command RequestType устройство возвращает ответ:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CommandUUID</key>
    <string>ph_mdm_command_uuid</string>
    <key>Status</key>
    <string>Acknowledged</string>
    <key>UDID</key>
    <string>device_udid</string>
</dict>
</plist>

Здесь CommandUUID аналогичен тому, который отправил сервер, UDID — это udid устройства, а статус — «Подтверждено», что означает, что команда была успешно выполнена на устройстве.

Примечание. Все это отправляется в ответе Java в виде байтов. Если вы имели в виду, в каком формате я отправлял ответ на устройство.

Я предполагаю, что отправить отзыв на устройство означает либо отправить следующий запрос, либо остановить опрос: аналогичные шаги необходимо выполнить, если у вас есть список команд для отправки на устройство, поскольку в настоящее время мы можем отправлять только одну команду за раз. Если нет команд для выполнения и вы хотите, чтобы устройство прекратило опрос, вам нужно отправить пустой ответ. См. iOS MDM - Как закрыть или остановить соединение после того, как устройство ответит действительным ответом для получения дополнительной информации.

Надеюсь, это рассеяло сомнения. Если вы находитесь на этапе регистрации, пожалуйста, ознакомьтесь с комментариями @Victor, прежде чем следовать этому. Дайте мне знать в случае каких-либо разъяснений. В настоящее время у меня успешно работает установка mdm на устройстве iOS.

Спасибо.

person Samreen    schedule 29.09.2014
comment
Спасибо за ответ и извините за поздний ответ, так как я был в отпуске. Что, если мне придется написать сервер MDM в ASP.NET. Какая разница в основном, по вашему мнению, будет в настройке сервера, если я пойду с вашим процессом и сервером MDM в ASP.NET. - person Imran; 10.10.2014
comment
@Imran: я не знаю об ASP.NET как о технологии, но что касается связи с устройством iOS, а также запроса и ответа, он всегда будет в формате plist, независимо от того, какую серверную технологию мы используем. Насколько мне известно, это скорее похоже на Java MDM Server. - person Samreen; 10.10.2014
comment
@Imran Имран: Вам просто нужно следовать тому, что написано в документе. Каждый шаг. Это не зависит от используемой вами технологии. Код Python только для справки. Теоретическая часть — это то, чему вы должны следовать и писать серверный код в своей конкретной серверной технологии. - person Samreen; 20.10.2014
comment
Привет Самрин. Спасибо за помощь, которую вы сделали. Я проверил все команды, и они отлично работают для меня, но между ними есть большая проблема. Когда я устанавливаю профиль на устройство, он работает нормально, и сразу после установки я отправляю команду (скажем, блокировка) к устройству, используя путь между сервером и устройством, созданный во время установки профиля. Итак, я проверил все команды во время установки профиля. Но когда я пытаюсь подключить сервер mdm к устройству через APNS, тогда он не отвечает. Я застрял в конце. Не могли бы вы подсказать, что может быть не так? - person Imran; 02.01.2015
comment
Привет Имран, я хотел бы знать, получили ли вы после установки профиля на устройстве какие-либо Token, PushMagic, UnlockToken. Всякий раз, когда мы хотим подключиться к устройству с помощью APNS, нам нужно отправить токен и PushMagic вместе с сертификатом apns и паролем. - person Samreen; 06.05.2015
comment
Привет, Сэмрин, извините за задержку... В процессе установки профиля MDM на устройстве устройство сначала отправляет эхо-запрос на сервер MDM с помощью списка аутентификации, который содержит UDID (уникальный идентификатор устройства), который нам нужно сохранить в нашем базы данных, после чего Устройство отправляет эхо-запрос на сервер MDM с помощью plist TokenUpdate, который содержит UDID, PushMagic, Token и UnlockToken. - person Imran; 09.05.2015
comment
Эй, Имран! Совершенно верно. Используйте токен и PushMagic для отправки команд в APNS. APns отправит внутреннюю команду на ваше устройство, и устройство свяжется с вашим mdm-serverUrl, который вы указали при установке профиля на устройстве. Вы можете использовать IPcu, чтобы проверить, получает ли ваше устройство команды или нет. Если оно получает команду, в журналах консоли iPCu вы увидите что-то вроде этого MDM: Опрос сервера MDM https: you-serverUrl для следующей команды. serverUrl всегда будет https, и устройство должно иметь сертификат сервера. Дайте мне знать ваш результат? - person Samreen; 11.05.2015
comment
Привет, Самрин, Вы можете видеть MDM: Опрос сервера MDM https: you-serverUrl для следующей команды. Если да, то поместите несколько журналов на serverURL, чтобы проверить запрос, который исходит от устройства, устройство в основном запрашивает статус Idle plist вместе с UDID.BTW, на какой вывод вы ссылаетесь? - person Imran; 11.05.2015
comment
Привет Имран, У нас есть полноценная работающая система MDM, реализованная для устройства iOS. Устройство отправит текущий статус в mdm. в первый раз он отправит статус Idle. В ответ на это вы должны отправить свою текущую команду, которая должна быть отправлена. Это кодирование вы должны сделать на своей стороне, то есть MDM. Ваша реализация основана на вашей системе.. зависит исключительно от вашего приложения.. Вывод, который я имел в виду, касался журналов консоли.. - person Samreen; 12.05.2015
comment
Какой журнал консоли. iPhone или сервер MDM? - person Imran; 13.05.2015
comment
Привет Самрин. Не набрал 4 балла. Как отправить полезную нагрузку push-уведомления в APN как {mdm : PushMagicToken-of-device}? Извините, я сейчас на начальном этапе. Как мы получаем статус простоя устройства? - person sau; 05.06.2015
comment
Здравствуйте, сау, вы успешно установили профиль mdm на свое устройство ?? Когда мы отправляем полезную нагрузку конфигурации mdm на устройство, мы отправляем поле Topic, которое представляет собой UID в формате, например com.apple.mgmt.External.ebad...., полученное с портала идентификации Apple. После того, как профиль будет установлен на устройство. Устройство отправляет токен Push magic и deviceToken на сервер mdm, который используется для отправки в APNS в формате {mdm: PushMagic}. Пожалуйста, возвращайтесь в случае проблем, которые вы обнаружили. Чтобы получить статус IDle, вам еще далеко до реализации, если вы находитесь на начальном этапе. - person Samreen; 08.06.2015
comment
@Samreen.. Привет, какой сервер вы используете для MDM? Первоначально мы использовали выделенный сервер, но теперь мы переносим его на Microsoft Azure. Таким образом, установка профиля завершается сбоем, когда мы его устанавливаем (Ошибка установки профиля). проблема с запросом PUT, что я узнал до сих пор. Вы дали какое-нибудь представление об этом? Нужно ли нам создавать новые сертификаты? - person Imran; 25.06.2015
comment
@Samreen ... Это сработало. В Azure это была немного другая проблема. Нам пришлось настроить запрос PUT поверх IIS для всех веб-приложений в Azure, поскольку мы используем SNI для наших приложений. то есть удаление WebDAV из обработчиков и WebDAVModule из модулей в файле webcofig. Спасибо за всю вашу помощь. - person Imran; 29.06.2015

Я не думаю, что есть способ ответить на ваш вопрос. Непонятно, в чем ваша проблема, и невозможно объяснить весь MDM здесь, в stackoverflow.

Я бы рекомендовал прочитать три документа (хотя бы пару раз):

Вообще говоря, невозможно разрабатывать MDM без глубокого понимания хотя бы первых двух документов.

Есть несколько реализаций с открытым исходным кодом, которые вы можете посмотреть:

  • Менеджер профилей (входит в состав OS X Server). это какая-то смесь ruby ​​+ двоичный код

  • WSO2

Могу поклясться, что видел реализацию MDM с открытым исходным кодом на Java, но сейчас не могу найти.

person Victor Ronin    schedule 23.07.2014
comment
Спасибо, Виктор. Я просмотрел все эти документы ранее, а также сослался на код WSO2 для первоначального понимания. База кода WSO2 имеет большую часть взаимодействия с базой данных и устройством, написанного на javascript (точно jQuery). Извините, я не мог ясно выразиться. Моя единственная проблема. Как мой сервер Java MDM будет взаимодействовать с устройством IOS. Мы реализовали эту Java для устройства Android с клиентом Android на стороне устройства, и мы могли бы обрабатывать взаимодействия с сервером Java MDM. Но поскольку IOS имеет встроенный MDM, который может напрямую взаимодействовать с нашим сторонним сервером MDM. - person Samreen; 24.07.2014
comment
Мой запрос: Ссылаясь на код WSO2, я нашел PushNotification для сервера APNS, используя приведенный ниже код. .строить(); служба.старт(); сервис.testConnection(); Строка mdmPayload = APNS.newPayload().mdm(pushMagicToken).build(); service.push(deviceToken, mdmPayload); здесь deviceToken и pushMagicToken были получены при регистрации устройства IOS, я полагаю. - person Samreen; 24.07.2014
comment
Этот код используется для отправки push-уведомлений на сервер APNS (для проверки состояния устройства), а не на устройство IOS. Мне нужен фактический код, который показывает, как отправить реальную команду, например команду DeviceLock, на устройство IOS, которую я не смог найти ни в одном из сообщений. Все документы касаются только того, что мы можем отправить на устройство, а не того, как это сделать. Мне нужна реализация как для стартапа. Пожалуйста помоги. - person Samreen; 24.07.2014
comment
О... понял. Идея следующая. Ваше устройство предоставит вам deviceToken и pushMagicToken (как вы упомянули). Вы отправите push-уведомление в APNS, когда у вас есть невыполненные команды на сервере. APNS перенаправит это push-уведомление на устройство (на встроенный клиент MDM, о котором вы упомянули). И этот клиент MDM свяжется с вашим сервером. Он выполнит GET для ServerURL, который был определен в полезной нагрузке MDM, установленной во время регистрации. Таким образом, вы можете думать о push-уведомлении как о запросе звонка домой, который вы отправляете через APNS на устройство. - person Victor Ronin; 24.07.2014
comment
Хорошо!! Спасибо, Виктор. Эти заявления почти рассеяли мои сомнения. Итак, у нас есть URL-адрес сервера, который мы передаем при регистрации, и этот URL-адрес поможет в большинстве случаев общаться устройству с сервером MDM. В коде WSO2 есть некоторая конфигурация, упомянутая для URL-адреса ios-enroll-url, ios-profile-url, ios-checkin-url, ios-server-url (так что это будет использоваться для будущих взаимодействий). сомнения ясны.. Может быть, что-то еще придет, когда я начну внедрять.. Виктор очень помог. :) - person Samreen; 25.07.2014
comment
Я полагаю, что в их случае регистрация и URL-адрес профиля предназначены для регистрации OTA, регистрация — для регистрации MDM, а URL-адрес сервера — для основной связи. - person Victor Ronin; 25.07.2014
comment
Да, это правильно... регистрация и профиль будут использоваться только при регистрации устройства. URL-адрес регистрации поможет для взаимодействия с mdm, например, когда происходит обновление токена, а URL-адрес сервера предназначен для основной связи. - person Samreen; 28.07.2014