二. MDM Check-in协议
MDM签入协议在初始化期间用于验证设备是否符合MDM注册资格,以及通知服务器设备的推送令牌已更新。
如果MDM负载中提供了签入服务器URL,则使用签入协议与该URL通信签入服务器。如果未提供签入服务器URL,则使用主MDM服务器URL。
note
MDM配置文件可以存储在Apple开放目录服务器中并从中读取。
Check-in请求的结构
安装MDM负载后,设备将启动与签入服务器的通信。装置验证服务器的TLS证书,然后使用在其MDM负载中指定的标识作为客户端连接的身份验证证书。
成功协商此安全连接后,设备将以以下格式发送HTTP PUT请求:
PUT /your/url HTTP/1.1
Host: www.yourhostname.com
Content-Length: 1234
Content-Type: application/x-apple-aspen-mdm-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>...</string>
<key>UDID</key>
<string>...</string>
</dict>
</plist>
服务器必须发送200(正常)状态代码以指示成功,或发送401(未授权)状态代码以表示失败。答复的正文将被忽略。
支持的Check-in命令
验证消息
Key | Type | Value |
---|---|---|
MessageType | String | Authenticate. |
Topic | String | The topic the device will listen to. |
UDID | String | The deviceʼs UDID. |
如果设备运行的是iOS 9或更高版本,并且如果设备信息访问权:
Key | Type | Value |
---|---|---|
OSVersion | String | 设备系统版本 |
BuildVersion | String | 设备build的版本 |
ProductName | String | 设备的名称(如: ”iPhone3,1”) |
SerialNumber | String | 设备的序列号 |
IMEI | String | 设备的IMEI(国际移动台设备标识) |
MEID | String | 设备的MEID(移动设备标识符) |
服务器响应
成功时,服务器必须以200 OK状态响应
服务器此时不应假定设备已安装MDM负载,因为配置文件可能仍然无法安装。当设备成功安装MDM负载时,它会发送一个令牌更新信息。
TokenUpdate 信息
设备在其设备推送令牌、推送魔术或解锁令牌更改。服务器需要这些字段来发送设备推送通知或密码重置。
TokenUpdate消息在其属性列表中包含以下键值对:
Key | Type | Value |
---|---|---|
MessageType | String | TokenUpdate |
Topic | String | 设备将要接收的Topic |
UDID | String | 设备的UDID |
Token | data | 设备的推送令牌。服务器在向设备发送推送通知时应使用此更新的令牌。警告:设备推送令牌的大小可能不同,MDM服务器不能假定所有推送令牌的大小都相同。然而,虽然最大的推送令牌的大小在将来的版本中可能会发生变化,但MDM服务器可能会假设它当前不大于100字节。 |
PushMagic | String | 推送通知消息中必须包含的幻数字符串。该值由设备生成(见下文)。 |
UnlockToken | data | 可选。可用于解锁设备的数据块。如果提供了,服务器应该记住这个数据blob,并用Clear Passcode命令发送它清除设备命令的密码。此功能在macOS中不可用。Base64解码后,数据blob的大小可能高达8 kB。 |
AwaitingConfiguration | Boolean | 可选。如果设置为true,则设备正在等待DeviceConfigured MDM命令,然后再继续执行安装助手。可用性:在iOS 9及更高版本中可用,只能由DEP发送(请参阅设备注册程序)。 |
当设备安装了MDM负载时,它会向服务器发送初始令牌更新消息。服务器应仅在接收到第一个令牌更新消息后才向设备发送推送消息。如果设备报告它正在等待配置,则MDM服务器应先发送设备配置的MDM命令,然后设备才能允许用户在安装助手中继续。这使MDM服务器有机会通过MDM命令进行一些设置。
除了发送初始令牌更新消息外,iOS设备现在可以在具有有效MDM注册的情况下随时向签入服务器发送其他令牌更新消息。
PushMagic的使用将设备约束为唯一的MDM关系。当用户删除MDM配置文件时,设备不应再监听以前的关系,即使用户重新建立了与同一服务器主题的管理关系。注意,在这种情况下,只有推送主题是相同的;服务器的地址可能已经更改。当用户从包含旧关系的备份中还原设备时,这也会有所帮助。使用PushMagic还可以确保接收签入消息的服务器与发送推送通知的计算机属于同一企业。这很重要,因为无法知道推送主题是否属于签入服务器的所有者。可以想象,苹果可能会撤销一个派对,只是让派对重新招收那些正在积极推动其他话题的人。所有MDM推送主题都位于命名空间中苹果管理公司*有助于防止这种情况。
note
后续TokenUpdate消息的PushMagic或UnlockToken字段可能与先前消息中的字段相同,也可能不同(并且大小可能与先前的值不同)。如果不同,服务器应将其设备记录更新为消息提供的新值。否则,服务器将无法发送推送通知或执行密码重置。
虽然设备可以多次发送UnlockToken消息,但如果PushMagic或UnlockToken值更改,则可能只发送一次。实现不应依赖于重复的消息来更新丢失的服务器端数据,也不应依赖于从处理以前的令牌更新消息失败中恢复。
note
MDM签入协议的主题字符串必须以 com.apple.mgmt. where 是唯一的后缀。
CheckOut
在iOS 5.0及更高版本和macOS v10.9中,如果MDM负载中的checkouthenremoved键设置为true,则删除MDM配置文件时,设备尝试发送签出消息。
在macOS v10.8中,当删除MDM配置文件时,无论此键的值(或其不存在)。
如果网络条件不允许成功传递消息,设备将不再尝试发送消息。服务器对此消息的响应将被忽略。
CheckOut消息包含以下键:
Key | Type | Value |
---|---|---|
OSVersion | String | CheckOut |
Topic | String | 设备将要接收的Topic |
UDID | String | 设备的UDID |