您可以使用政策在设备上配置 Wi-Fi 网络。Android Management API 使用开放网络配置,这是一种基于 JSON 的标准格式,最初是在 Chromium 项目中开发的。如需详细了解开放网络配置,请参阅规范。
如需在政策中添加开放网络配置,请在 Policy
资源上设置 openNetworkConfiguration
字段。
对于完全受管理的设备,您可以选择在 Policy
资源中将 wifiConfigDisabled
设置为 true
,以禁止用户在其设备上手动配置 Wi-Fi 设置。
支持的功能
Android Management API 仅支持 Open Network Configuration 规范的一部分。
- 顶级对象:
- 必须省略
Type
或将其设置为UnencryptedConfiguration
。无需对政策中的网络配置进行加密,因为整个政策都在 Android Management API 服务中加密。此外,系统还会对口令和私钥等敏感信息进行第二层加密。
- 必须省略
NetworkConfiguration
对象:GUID
、Name
、Type
和WiFi
是受支持的字段,并且都必须填写。ProxySettings
是一个可选字段。如果使用此方法,则仅支持Manual
和PAC
(代理自动配置)。Type
必须设置为WiFi
。不支持其他类型的网络。
WiFi
对象:- 支持
SSID
和HexSSID
,并且必须至少包含其中一个。- 如果同时设置了
HexSSID
和SSID
,则值必须一致。
- 如果同时设置了
HiddenSSID
。- 不支持
AllowGatewayARPPolling
。 - 不支持
SignalStrength
。 Security
是必需的,并且支持以下值: - 无 - WEP-PSK - WPA-PSK - WPA-EAP - WEP-8021X - WPA3-Enterprise_192- 对于
WEP-PSK
口令,仅支持 40 位(10 位数)或 104 位(26 位数)口令。 - 规范规定,
WEP-PSK
口令必须以0x
前缀开头。不过,为了与 Android 框架保持一致,此前缀不是必需的。 - 如需设置 MAC 随机化模式,请使用值为
Hardware
或Automatic
的属性MACAddressRandomizationMode
。此属性目前不适用于 Open Network Configuration (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
支持以下值:Ref
、KeyPairAlias
Inner
支持以下值:MSCHAPv2
、PAP
Outer
支持以下值:EAP-AKA
、EAP-TLS
、EAP-TTLS
、EAP-SIM
、PEAP
- 不支持
Certificate
对象:- 不支持
Remove
。请改为在配置中省略证书。 - 不支持
TrustBits
。
- 不支持
示例
多个 Wi-Fi 网络
此政策示例片段显示了使用不同安全方案配置的三个 Wi-Fi 网络。Open Network Configuration 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
字段还可以设置为 KeyPairAlias
,ClientCertKeyPairAlias
字段可用于指定用于 Wi-Fi 身份验证的已安装(请参阅 DevicePolicyManager.installKeyPair
)或生成(请参阅 DevicePolicyManager.generateKeyPair
)的 KeyChain 密钥对的别名。在 Android 12 及更高版本中,系统会授予使用 ClientCertKeyPairAlias
指定别名的 KeyChain 密钥对,以便对 Wi-Fi 网络进行身份验证,并用于对相应的 Wi-Fi 网络进行身份验证。在 Android 12 以下版本中,系统会报告原因为 API_LEVEL
的 nonComplianceDetail
。如果指定的密钥对别名与现有密钥不符,系统会报告 nonComplianceDetail
,并附带 INVALID_VALUE
原因和 ONC_WIFI_KEY_PAIR_ALIAS_NOT_CORRESPONDING_TO_EXISTING_KEY
具体原因。以下是政策示例:
"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" } ] }