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

Ven*_*nky 18 mdm ios

我的公司里有很多iOS设备,我必须集中管理它们,所以我们尝试使用第三方MDM应用程序,例如:airwatch,但成本非常高.

我们决定不使用它,并考虑从头开始创建MDM.我们尝试了所有在线提供的解决方案但我没有得到任何解决方案 任何人都可以帮我这个.

Dur*_*n.H 42

iOS MDM是无客户端协议.因此,您开发了一个服务器,但是您没有为它开发客户端应用程序.实际上,有一个客户端应用程序,但它是由Apple开发并内置到操作系统中.

因此,您的服务器将发送命令,内置MDM客户端将接收并执行它.

一般来说,如果要开发MDM服务器,则需要注册到Enterprise Developer Program并获取MDM文档.

这里的文档它将帮助您从头开始创建自己的mdm解决方案我相信

参考

关于开发mdm服务器Ref 1, Ref 2的一些其他有用的链接

以下是堆栈溢出浏览中MDM标记的链接,这将帮助您获得大多数常见问题解答的答案

如果您想在此处进行任何澄清以完成此评论.我愿意帮助你

更新

概观

  • 为了管理设备,我们可以使用iOS设置应用程序手动配置它

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

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

    但它需要用户互动

  • 所以苹果为iOS推出了MDM服务它不需要用户交互我们可以很容易地做很多事情而无需用户同意,如远程锁定,解锁,擦除,配置邮件等...

    MDM基本上是一种协议,您可以使用它远程管理设备.

    概观

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

    让我们说我们正在关闭设备中的App Store应用程序安装,为此我们将去设置 - >限制并关闭App Store安装,以便在其配置(.plist)中将allowAppInstallation变为false假设我们说正在使用iPCU以及MDM配置应用程序安装,当iOS设置应用程序配置文件,iPCU配置文件和MDM配置文件的配置配置文件之间发生冲突时,我们将采用最严格的应用程序安装.

    iOS通过合并所有这些配置文件和iOS工作来创建名为ProfileTruth.plist的配置文件

    MDM基本上由这些东西组成

    • iOS设备

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

    • MDM服务器

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

    • 信令

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

在此我附上了MDM工作流程

MDM工作流程

  1. MDM服务器使用APNS发送通知
  2. APNS将其提供给设备
  3. 内置MDM客户端连接到MDM Server
  4. 连接时,MDM Server将排队的命令发送回客户端,客户端根据MDM服务器发送的命令执行操作,并向MDM服务器回复相应的确认

创建简单MDM的步骤

MDM注册

它从MDM注册配置文件开始

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

MDM注册配置文件

签入URL

 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 
Run Code Online (Sandbox Code Playgroud)

服务器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
Run Code Online (Sandbox Code Playgroud)

话题

Enter the subject of APNS certificate that's going to be used for MDM.
Run Code Online (Sandbox Code Playgroud)

身分

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.
Run Code Online (Sandbox Code Playgroud)

安装MDM注册配置文件

您可以使用"空中""通过USB"安装此配置文件

安装后,iOS内置客户端将立即通过Authenticate请求连接到MDM服务器(Check In 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>
Run Code Online (Sandbox Code Playgroud)

现在服务器可以接受或拒绝Authenticate请求.为了接受服务器必须用空白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>
Run Code Online (Sandbox Code Playgroud)

收到响应后,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>
Run Code Online (Sandbox Code Playgroud)

服务器需要再次发送普通plist来完成注册过程

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

PushMagic

服务器必须将此附加到它发送以连接MDM客户端的所有Push通知

代币

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

UnlockToken

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

管理设备

现在,服务器必须通过将Token上方的Token传递给Token for Push通知库和Payload of Pushmagic作为密钥MDM的值来发送推送通知

 {"mdm":"996ac527-9993-4a0a-8528-60b2b3c2f52b"}
Run Code Online (Sandbox Code Playgroud)

请参阅此有效负载中不存在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> 
Run Code Online (Sandbox Code Playgroud)

然后,服务器以其为该设备排队的任何命令进行响应.

让我们看一下Device Lock的示例

 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>
Run Code Online (Sandbox Code Playgroud)

当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> 
Run Code Online (Sandbox Code Playgroud)

你可以在这里找到一些命令列表

在此输入图像描述

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

注意:

我将尝试微调或添加更多内容,以便于理解