設定網路

您可以使用政策設定裝置上的 Wi-Fi 網路。Android Management API 會使用開放式網路設定,這是一種標準的 JSON 格式,最初是 Chromium 專案的一部分。如要進一步瞭解開放式網路設定,請參閱規範

如要在政策中納入開放式網路設定,請在 Policy 資源上設定 openNetworkConfiguration 欄位。

如果是完全受管理的裝置,您可以選擇在 Policy 資源中將 wifiConfigDisabled 設為 true,藉此防止使用者在裝置上手動設定 Wi-Fi 設定。

支援的功能

Android Management API 僅支援 Open Network Configuration 規格的一部分。

  • 頂層物件:
    • Type 必須省略或設為 UnencryptedConfiguration。您不需要在政策中加密網路設定,因為整個政策會在 Android 管理 API 服務中加密。此外,系統還會為機密資訊 (例如密碼短句和私密金鑰) 提供第二層加密機制。
  • NetworkConfiguration 物件:
    • GUIDNameTypeWiFi 都是支援的欄位,且皆為必填欄位。
    • ProxySettings 是選用欄位。如果使用這個選項,系統只會支援 ManualPAC (Proxy Auto-Configuration)。
    • Type 必須設為 WiFi。不支援其他類型的網路。
  • WiFi 物件:
    • 系統支援 SSIDHexSSID,且至少必須提供其中一個。
      • 如果同時設定 HexSSIDSSID,兩者的值必須一致。
    • 支援 HiddenSSID
    • 不支援「AllowGatewayARPPolling」。
    • 不支援「SignalStrength」。
    • 必須提供 Security,且支援下列值: - None - WEP-PSK - WPA-PSK - WPA-EAP - WEP-8021X - WPA3-Enterprise_192
    • 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 位址,用於連線至網路。
  • EAP 物件:
    • 不支援「ClientCertPattern」。
    • 系統一律會儲存憑證,因此不支援 SaveCredentials
    • 不支援「UseSystemCAs」。
    • 支援 ServerCARef
    • 支援 ServerCARefs
    • 支援 DomainSuffixMatch。沒有這個欄位 (或以空白清單做為值) 的企業無線網路設定會被視為不安全,並遭到平台拒絕。值應為有效的網域名稱 (例如「example.com」、「subdomain.example.com」)。
    • ClientCertType 支援以下值:RefKeyPairAlias
    • 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"
               ],
               "ServerCARefs": ["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) KeyChain 金鑰組的別名。在 Android 12 以上版本中,具有 ClientCertKeyPairAlias 指定別名的 KeyChain 金鑰組會授予 Wi-Fi 網路驗證權限,並用於驗證對應的 Wi-Fi 網路。在 Android 12 以下版本中,系統會回報 nonComplianceDetail,並附上 API_LEVEL 原因。如果指定的金鑰組別別名不對應至現有金鑰,系統會回報含有 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"
               ],
               "ServerCARefs": ["abc123"],
               "ClientCertType": "KeyPairAlias",
               "ClientCertKeyPairAlias": "key-alias"
            },
            "Security": "WPA-EAP"
         }
      }
   ],
   "Certificates": [
      {
         "GUID": "abc123",
         "Type": "Server",
         "X509": "TWFuIGlzIGRpc3Rpbmd1a"
      }
   ]
}

Security 欄位也可以是 WPA3-Enterprise_192,這是以 WPA3 192 位元模式設定的 WPA-EAP 網路。

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