配置网络

您可以使用政策在设备上配置 Wi-Fi 网络。Android Management API 使用开放网络配置,这是一种基于 JSON 的标准格式,最初是作为 Chromium 项目的一部分开发的。如需了解开放网络配置的完整详情,请参阅规范

如需在政策中包含开放网络配置,请设置 Policy 资源的 openNetworkConfiguration 字段。

对于全代管式设备,您可以选择阻止用户在其设备上手动配置 Wi-Fi 设置,方法是在 Policy 资源中将 wifiConfigDisabled 设置为 true

支持的功能

Android Management API 仅支持部分开放网络配置规范。

  • 顶级对象:
    • Type 必须省略或设置为 UnencryptedConfiguration。无需加密政策中的网络配置,因为整个政策都在 Android Management API 服务中加密。 此外,对于密码和私钥等敏感信息,还存在第二层加密。
  • NetworkConfiguration 对象:
    • GUIDNameTypeWiFi 是受支持的字段,均为必填字段。
    • ProxySettings 是一个可选字段。如果使用此选项,则仅支持 ManualPAC(代理自动配置)。
    • Type 必须设置为 WiFi。不支持其他类型的网络。
  • WiFi 对象:
    • 不支持 AllowGatewayARPPolling
    • 不支持 SignalStrength
    • 对于 WEP-PSK 口令,仅支持 40 位(10 位)或 104 位(26 位)密码。
    • 该规范规定,WEP-PSK 口令必须以 0x 前缀开头。不过,为了与 Android 框架保持一致,不需要此前缀。
    • 如需设置随机分配 MAC 地址模式,请使用 MACAddressRandomizationMode 属性,并将其值设为 HardwareAutomatic。此属性目前在开放网络配置 (ONC) 规范中不可用,但在 AMAPI 中提供,并且可以在配置 Wi-Fi 网络时指定。此设置仅适用于搭载 Android 13 及更高版本的所有管理模式。
      • Hardware 会在连接到网络时使用出厂 MAC 地址。
      • Automatic 允许 Wi-Fi 框架自动决定随机分配 MAC 地址策略。该 MAC 地址可以是在连接到网络时使用的随机生成的永久性或非永久性 MAC 地址。
  • EAP 对象:
    • 不支持 ClientCertPattern
    • 不支持 SaveCredentials
    • 不支持 UseSystemCAs
    • 支持 DomainSuffixMatch
      不含此字段(或值为空列表)的企业无线配置会被视为不安全并被平台拒绝。 值应为有效的域名(例如“example.com”“subdomain.example.com”)。
    • ClientCertType 仅支持 Ref
    • Inner 支持以下值:MSCHAPv2PAP
    • Outer 支持以下值:EAP-AKAEAP-TLSEAP-TTLSEAP-SIMPEAP
  • Certificate 对象:
    • 不支持 Remove。请改为在配置中省略证书。
    • 不支持 TrustBits

示例

多个 Wi-Fi 网络

此示例政策片段显示了三个配置了不同安全方案的 Wi-Fi 网络。开放网络配置 JSON 嵌套在 Policy JSON 的 openNetworkConfiguration 字段中。

"openNetworkConfiguration": {
  "NetworkConfigurations": [{
    "GUID": "a",
    "Name": "Example A",
    "Type": "WiFi",
    "WiFi": {
      "SSID": "Example A",
      "Security": "None",
      "AutoConnect": true
    }
  }, {
    "GUID": "b",
    "Name": "Example B",
    "Type": "WiFi",
    "WiFi": {
      "SSID": "Example B",
      "Security": "WEP-PSK",
      "Passphrase": "1234567890"
    }
  }, {
    "GUID": "c",
    "Name": "Example C",
    "Type": "WiFi",
    "WiFi": {
      "SSID": "Example C",
      "Security": "WPA-PSK",
      "Passphrase": "baseball"
    }
  },
  "GUID": "networkA",
   "Name": "networkA",
   "Type": "WiFi",
   "WiFi": {
     "SSID": "networkA",
     "Security": "WPA-PSK",
     "Passphrase": "pwd1234567",
     "MACAddressRandomizationMode":"Hardware"
   }
 }]
}

EAP 身份验证

以下政策片段示例显示了配置了 EAP-TLS 身份验证的无线网络。除了 NetworkConfigurations 对象之外,该示例还包含用于客户端证书和服务器证书的两个 Certificates 对象。

"openNetworkConfiguration": {
   "Type": "UnencryptedConfiguration",
   "NetworkConfigurations": [
      {
         "GUID": "a",
         "Name": "Example A",
         "Type": "WiFi",
         "WiFi": {
            "SSID": "Example A",
            "EAP": {
               "Outer": "EAP-TLS",
               "Identity": "example",
               "DomainSuffixMatch": [
                  "example.com",
                  "example.org"
               ],
               "ServerCARef": "abc123",
               "ClientCertType": "Ref",
               "ClientCertRef": "xyz456"
            },
            "Security": "WPA-EAP"
         }
      }
   ],
   "Certificates": [
      {
         "GUID": "abc123",
         "Type": "Server",
         "X509": "TWFuIGlzIGRpc3Rpbmd1a"
      },
      {
         "GUID": "xyz456",
         "Type": "Client",
         "PKCS12": "6PQIEQYJKoZbdDu8gwggRlqCCAPEbAAcGClgvcNAQc"
      }
   ]
}

ClientCertType 字段也可设置为 KeyPairAliasClientCertKeyPairAlias 字段可用于指定用于 Wi-Fi 身份验证的已安装(请参阅 DevicePolicyManager.installKeyPair)或生成的(请参阅 DevicePolicyManager.generateKeyPair)密钥链密钥对的别名。在 Android 12 及更高版本中,系统会授予使用 ClientCertKeyPairAlias 指定的别名的 KeyChain 密钥对,用于向相应 Wi-Fi 网络进行身份验证。在 Android 12 以下,系统会报告带有 API_LEVEL 原因的 nonComplianceDetail。如果指定的密钥对别名与现有密钥不对应,系统会报告带有 INVALID_VALUE 原因和 ONC_WIFI_KEY_PAIR_ALIAS_NOT_CORRESPONDING_TO_EXISTING_KEY 具体原因的 nonComplianceDetail。以下是政策示例:

"openNetworkConfiguration": {
   "Type": "UnencryptedConfiguration",
   "NetworkConfigurations": [
      {
         "GUID": "a",
         "Name": "Example A",
         "Type": "WiFi",
         "WiFi": {
            "SSID": "Example A",
            "EAP": {
               "Outer": "EAP-TLS",
               "Identity": "example",
               "DomainSuffixMatch": [
                  "example.com",
                  "example.org"
               ],
               "ServerCARef": "abc123",
               "ClientCertType": "KeyPairAlias",
               "ClientCertKeyPairAlias": "key-alias"
            },
            "Security": "WPA-EAP"
         }
      }
   ],
   "Certificates": [
      {
         "GUID": "abc123",
         "Type": "Server",
         "X509": "TWFuIGlzIGRpc3Rpbmd1a"
      }
   ]
}