您的位置:首页 > 移动开发 > IOS开发

IOS MDM流程

2013-11-22 16:45 330 查看
http://www.mbaike.net/ios/1552.html

一、MDM资料下载:

BH_US_11_Schuetz_InsideAppleMDM_WP.pdf(MDM流程及资料最全的PDF文档)

二、MDM流程整理:

1、创建和部署https(SSL)服务器,文档参见(Create https web server):


(1)、申请IOS开发MDM需要的https(SSL)证书和密钥

(2)、部署https(SSL)服务器环境

我们这里使用的是Nginx和Jetty搭建的https web服务器。

2、生成mobileconfig配置文件(MDM Enrollment Profile):

生成mobileconfig文件需要注意两个URL地址:Server URL 和 Check In URL两个地址需要配置成https服务器上两个RestFull方法为PUT的地址,例如:https://www.mbaike.net:8443/mdm/server/123456789 和 https://www.mbaike.net:8443/mdm/checkin/123456789(注意请求的Method要配置成PUT);
具体参见:配置描述文件mobileconfig的生成及注意事项

3、安装mobileconfig配置文件:

mobile配置文件安装时会执行两部操作,即Authenticate和Token Update。

(1)、Authenticate:

当IOS设备安装mobileconfig文件时, 设备会马上去连接MDM server(即我们配置的https服务器上部署的程序),第一步是通过“Check In URL”发送一个“Authenticate”的请求信息,设备会将“UDID”,即“Universal Device Identifier”和推送通知的“Topic”信息。

如下就是设备请求服务器checkin方法,将下面的xml格式的数据发送给MDM Server:

——————————————————————-

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>

——————————————————————-

请求后,MDM Server只需要发送一个空的xml格式的文件给设备(Device)就行了,代码如下:

——————————————————————-

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

</dict>

</plist>

——————————————————————-

(2)、Token Update:

完成了设备的认证,接下来设备再次请求服务器的,通过“Check In URL”发送一个“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>

——————————————————————-

这里,我们需要获取几个有用的数据:PushMagic、Token、Topic、UDID、UnlockToken 这几个参数都很重要,一定要在服务器保存好。

我们收到这样的数据后,我们不需要返回一个空的xml格式的文件,我们只需要返回一个“200”状态就行了。(Again, the server doesn’t need to provide any response beyond a simple blank plist. Once this is complete, the server retains copies of the tokens, and the device is now fully enrolled.)

具体参见:安装mobileconfig配置描述文件及完成Authenticate和Token Update功能

4、发送MDM推送信息到apple的APNS推送服务器:

在完成MDM推送证书文件后,我们现在需要向APNS服务器发送一个推送命令来告诉设备,MDM服务器需要连接设备发送MDM命令了。我们通过java-apns jar组件来完成信息的发送,发送的具体内容例如:

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

具体参见:MDM推送证书的生成及java-apns组件的测试代码编写

5、通过MDM推送证书向设备发送锁屏命令

发送锁屏命令时,我们需要在推送一个类似:{"aps":{},"mdm":"996ac527-9993-4a0a-8528-60b2b3c2f52b"} 这样的命令时,我们需要在服务器保存一条和锁屏相关的数据,设备受到推送消息时,会向MDM Server的Server URL发送一个状态“Status”为“Idle”的数据xml数据,MDM server收到这样的状态后。MDM server调用数据,返回一个如下格式的锁屏命令(The DeviceLockcommand requires no parameters,
and is simply the following:):

——————————————————————-

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

——————————————————————-

设备执行成功后,会返回给服务器的Server URL地址一个如下的数据(When this is provided to the device, as the response to the Status: Idle command, the device immediately locks. The response from the device is the standard acknowledgement message:):

——————————————————————-

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>

——————————————————————-

这样的数据,就表示设备执行完成。

具体参见:

(1)、通过APNS发送MDM的锁屏命令

(2)、通过APNS发送MDM的恢复出厂设置命令

(3)、通过APNS发送MDM的查询设备信息的命令

三、MDM相关说明:

1、这里只是简单说明了MDM过程,具体的过程参见:基于IOS上MDM技术相关资料整理及汇总

2、我们这边的MDM Server使用JAVA作为服务器端开发语言,Jetty作为 web application容器,前端使用nginx作为前端代理;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: