如何在iOS上开发移动设备管理应用程序

21

我公司有许多iOS设备需要统一管理,因此我们尝试使用第三方MDM应用程序,例如:Airwatch,但价格非常昂贵。

我们决定不使用它,并考虑从零开始创建MDM。我们尝试了所有在线可用的解决方案,但没有找到任何解决方案。请问有人能帮助我吗?


1
我不确定你为什么认为编写复杂代码会比商用系统更便宜,因为商用系统的成本已经分摊到许多客户身上。但是你看过思科Meraki吗?它对于最多100个设备是免费的。 - Paulw11
今天免费,明天可能会收费。 - Venky
2个回答

59
iOS MDM是一种无客户端协议。因此,您需要开发一个服务器,但不需要为其开发客户端应用程序。实际上,有一个客户端应用程序,但它是由苹果公司开发并内置于操作系统中的。
因此,您的服务器将发送命令,内置的MDM客户端将接收并执行它。
一般来说,如果您想开发MDM服务器,您需要注册企业开发者计划并获取MDM文档。
这里有一份文档here,我相信它会帮助您从头开始创建自己的MDM解决方案。 参考 关于开发MDM服务器的其他有用链接: Ref 1, Ref 2 Here is the link to MDM tag in stack overflow browsing this will help you get answer for most of the FAQ
如果您想要了解如何完成此操作的任何澄清,请在下面评论。 我随时准备帮助您。
更新
概述
  • 为了管理设备,我们可以使用iOS设置应用程序手动配置它

    但是它存在可扩展性问题,手动配置每个设备需要大量工作,并且需要物理访问

  • 因此,苹果推出了iPCU(iPhone配置实用程序)工具,使用该工具我们可以创建配置文件(.moibleconfig),并可以通过USB或OTA(空中)安装它

    但是需要用户交互

  • 因此,苹果为iOS引入了MDM服务,它不需要用户交互,我们可以轻松地执行许多操作而无需用户同意,例如远程锁定、解锁、擦除、配置邮件等...

    MDM基本上是一种协议,可以远程管理设备。

    概述

    iOS设置应用程序中所做的更改存储在/var/mobile/Library/ConfigurationProfiles中,作为.plist文件与iPCU和MDM安装的配置文件(.plist)一起。

    假设我们正在关闭设备中的应用商店应用程序安装,因此要这样做,我们将转到设置->限制并关闭应用商店安装,因此在其配置(.plist)中将allowAppInstallation变为false。假设我们也使用iPCU和MDM配置应用程序安装,那么当iOS设置应用程序配置文件、iPCU配置文件和MDM配置文件之间发生冲突时,iOS将采取最严格的配置文件。

    iOS通过合并所有这些配置文件创建一个名为ProfileTruth.plist的配置文件,并根据此plist工作

    MDM基本上由以下内容组成

    • iOS设备

      它可以是运行iOS的任何设备。所有iOS设备都有内置的MDM客户端。它将根据MDM服务器提供的指令执行操作

    • MDM服务器

      它基本上是托管在应用程序或Web服务器上的应用程序,并向托管在iOS设备上的MDM客户端提供命令

    • 信令

      这是一种机制,从服务器中调用mdm客户端,在我们的情况下是APNS

现附MDM工作流程

MDM Workflow

  1. MDM服务器使用APNS发送通知
  2. APNS将其传递到设备
  3. 内置的MDM客户端连接到MDM服务器
  4. 连接后,MDM服务器向客户端发送排队的命令,并且客户端根据MDM服务器发送的命令执行操作,并向MDM服务器回复适当的确认

创建简单MDM的步骤

MDM注册

它始于MDM注册文件

在iPCU中,您可以选择MDM有效负载来创建新配置文件

MDM Enrolment Profile

检查入口网址

 The is the URL where enrolment of the device happens. 

 i.e upon installation of profile on the device MDM client sends necessary information to the MDM server which MDM server will use to authenticate and connect with the device 

服务器 URL

 Once the MDM server got the enrolment information.It can use the information to connect the device using APNS and when MDM client wakes up it connects with the URL mentioned in Server URL and Server can send back the queued commands to MDM client

主题

Enter the subject of APNS certificate that's going to be used for MDM.

身份

It can be any certificate generated by Certificate Assistant but important thing is it has to be signed by globally trusted CA or in the case of self signed CA the CA has be installed in the device.

安装MDM注册配置文件
您可以使用“通过空中”或“通过USB”方式安装此配置文件。
一旦安装完成,iOS内置客户端将使用验证请求连接到MDM服务器(检查URL)。
PUT:/checkin
<?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>MessageType</key>
     <string>Authenticate</string>
     <key>Topic</key>
     <string>com.example.mdm.pushcert</string>
     <key>UDID</key>
     <string> [ redacted ] </string>
 </dict>
 </plist>

现在服务器可以接受或拒绝“身份验证”请求。为了接受,服务器必须用空白的plist进行响应。
  <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
     "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
     <plist version="1.0">
     <dict>
     </dict>
     </plist>

收到响应后,MDM客户端将发送TokenUpdate请求。
PUT: /checkin
 <?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>MessageType</key>
     <string>TokenUpdate</string>
     <key>PushMagic</key>
     <string> [ redacted uuid string ] </string>
     <key>Token</key>
     <data> [ 32 byte string, base64 encoded, redacted ] </data>
     </data>
     <key>Topic</key>
     <string>com.example.mdm.pushcert</string>
     <key>UDID</key>
     <string> [ redacted ] </string>
     <key>UnlockToken</key>
     <data>
        [ long binary string encoded in base64, redacted ]
     </data>
 </dict>
 </plist>

再次,服务器需要发送一个纯文本plist以完成注册过程

MDM服务器必须在服务器上存储以下密钥

PushMagic

服务器必须将其附加到发送到连接MDM客户端的所有推送通知中

Token

用于标识设备到APNS的唯一ID

UnlockToken

用于清除设备密码的密钥。

管理设备

现在,服务器必须通过将上述 Token 传递给Push通知库的Token和将 Pushmagic 的Payload作为键 MDM 的值来发送Push通知。

 {"mdm":"996ac527-9993-4a0a-8528-60b2b3c2f52b"}

这个负载中没有出现aps

设备接收到推送通知后,MDM客户端会以空闲状态联系服务器URL而不是签入URL

PUT: /server

 <?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> 

服务器随后会响应设备排队的任何命令。让我们看一个关于“设备锁定”的示例。
 The server has to respond with command like this to the client request

 <?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></string>
 </dict>
</plist>

当MDM客户端收到此前发送的“空闲状态”请求时,它将立即锁定设备并向服务器响应以下标准确认。
<?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></string>
           <key>Status</key>
           <string>Acknowledged</string>
           <key>UDID</key>
           <string> [ redacted ] </string>
     </dict>
    </plist> 

您可以在此处找到一些命令列表

enter image description here

这就是全部了。这种方法可以做一个简单的演示。

注意:

我会尝试微调或添加更多内容,以便更容易理解。


@SaurabhJain - 不确定,请查阅最新的MDM文档。其中可能包含有关可以使用MDM客户端执行的事项清单信息。 - Durai Amuthan.H
请在此处查阅:[https://developer.apple.com/library/content/documentation/Miscellaneous/Reference/MobileDeviceManagementProtocolRef/3-MDM_Protocol/MDM_Protocol.html#//apple_ref/doc/uid/TP40017387-CH3-SW2] - Durai Amuthan.H
很好的解释。谢谢。我想知道如何获取已安装应用程序列表? 在服务器或应用程序中做任何事情吗? 你能给我任何关于此的链接或示例吗?谢谢。 - Developer
@DuraiAmuthan.H 解释得非常好。谢谢!我有一个问题。如何将设备与其所有者关联起来。如果我向100个地址发送注册配置文件,由于我们只获得UDID,我怎么知道哪个设备属于哪个用户? - Ivan

2
请查看此链接和内容:链接 关于移动设备管理:
移动设备管理(MDM)协议提供了一种方式,使系统管理员可以向运行iOS 4及更高版本、运行OS X v10.7及更高版本的OS X设备以及运行iOS 7(Apple TV软件6.0)及更高版本的Apple TV设备发送设备管理命令。通过MDM服务,IT管理员可以检查、安装或删除配置文件;删除密码;并在受管设备上开始安全擦除。
MDM协议是建立在HTTP、传输层安全性(TLS)和推送通知之上的。相关的MDM签到协议提供了一种将初始注册过程委托给单独服务器的方法。
MDM使用苹果推送通知服务(APNS)向受管设备传递“唤醒”消息。然后设备连接到预定的Web服务以检索命令并返回结果。
为提供MDM服务,您的IT部门需要部署一个HTTPS服务器作为MDM服务器,然后分发包含MDM负载的配置文件到您的受管设备中。
受管设备使用身份验证自己与TLS(SSL)上的MDM服务器进行身份验证。此身份可以作为证书负载包含在配置文件中,也可以通过使用SCEP注册设备来生成。
注意:有关SCEP的信息,请参见位于datatracker.ietf.org/doc/draft-nourse-scep/的草案SCEP规范。
MDM负载可以放置在配置文件(.mobileconfig)中,通过电子邮件或网页分发,在通过OTA(无线电视机)注册服务提供的最终配置文件中自动安装,或者通过设备注册计划自动安装。每次只能在设备上安装一个MDM负载。
通过MDM服务安装的配置文件和预配配置文件称为受管配置文件。这些配置文件在删除MDM负载时会自动删除。虽然MDM服务可能有权检查设备的完整配置文件或预配配置文件列表,但它只能删除最初安装的应用程序、配置文件和预配配置文件。使用受管配置文件安装的帐户称为受管帐户。
除了受管配置文件,您还可以使用MDM安装应用程序。通过MDM服务安装的应用程序称为受管应用程序。MDM服务对如何在设备上使用受管应用程序及其数据具有额外的控制权。
运行iOS 5及更高版本的设备可以在使用Apple Configurator 2准备部署时指定为受监督设备。此外,运行iOS 7及更高版本的设备可以使用设备注册计划进行监督。受监督设备提供了组织对其配置和限制的额外控制。在本文档中,如果任何配置选项仅限于受监督设备,则其描述会注明该限制。
除非使用设备注册计划安装配置文件,否则用户可以随时删除包含MDM负载的配置文件。无论其访问权限如何,MDM服务器始终可以删除自己的配置文件。在OS X v10.8及更高版本和iOS 5中,当删除配置文件时,MDM客户端会尝试使用CheckOut命令与服务器联系一次。在早期的OS版本中,当用户删除负载时,设备不会联系MDM服务器。请参阅MDM最佳实践以获取有关如何检测不再受管理的设备的建议。
除非使用设备注册计划安装,否则包含MDM负载的配置文件无法锁定。但是,通过MDM安装的受管理配置文件可以被锁定。通过MDM安装的所有受管理配置文件都会在主MDM配置文件被删除时删除,即使它们被锁定。
简要概述:
本文档适用于为企业环境中的设备管理设计软件的系统管理员和系统集成商。
MDM Check-in协议允许设备联系您的服务器
在初始化期间使用MDM check-in协议来验证设备是否符合MDM注册条件,并通知服务器设备令牌已更新。
相关章节:MDM Check-in Protocol
MDM协议向设备发送管理命令
(主)MDM协议使用推送通知告诉受管理设备执行特定功能,例如删除应用程序或执行远程擦除。
相关章节:移动设备管理(MDM)协议
设计有效载荷的方式很重要
为了最大程度地提高效率和安全性,请安装一个基本配置文件,其中包含的仅是最基本的MDM管理信息,然后在设备受管理后安装其他配置文件。
相关章节:MDM最佳实践
设备注册计划允许您使用设置助手配置设备
基于HTTP的设备注册计划解决了购买和部署大量设备的组织的大规模配置需求,而无需工厂定制或在部署前预配置设备。
云服务API提供配置文件管理和映射。使用此API,可以创建配置文件、更新配置文件、删除配置文件、获取设备列表,并将这些配置文件与特定设备关联。
相关章节:设备注册计划
批量购买计划允许您向用户和设备分配应用程序许可证
批量购买计划提供了一些Web服务,MDM服务器可以调用这些服务来将批量购买与特定用户或设备相关联。
相关章节:VPP应用分配
苹果推送通知证书可以通过苹果推送证书门户生成
在收到客户的CSR之前,必须通过iOS Provisioning Portal下载“MDM签名证书”和相关的信任证书。然后,必须使用该证书签署客户的证书。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接