Você pode usar uma política para configurar redes Wi-Fi em um dispositivo. A API Android Management usa o Open Network Configuration, um formato padrão baseado em JSON que foi originalmente desenvolvido como parte do projeto Chromium.
Para incluir uma configuração de rede aberta em uma política, defina o campo
openNetworkConfiguration em um recurso
Policy.
Para dispositivos totalmente gerenciados, você pode impedir que um usuário configure manualmente as configurações de Wi-Fi no dispositivo definindo wifiConfigDisabled como true no recurso Policy.
Recursos compatíveis
A API Android Management é compatível apenas com um subconjunto da especificação Open Network Configuration.
- Objeto de nível superior:
Typeprecisa ser omitido ou definido comoUnencryptedConfiguration. Não é necessário criptografar a configuração de rede em uma política porque toda a política é criptografada no serviço da API Android Management. Além disso, há uma segunda camada de criptografia para informações sensíveis, como senhas e chaves privadas.
- Objetos
NetworkConfiguration:GUID,Name,TypeeWiFisão campos aceitos e obrigatórios.ProxySettingsé um campo opcional. Se isso for usado, somenteManualePAC(configuração automática de proxy) serão compatíveis.Typeprecisa ser definido comoWiFi. Outros tipos de redes não são compatíveis.
- Objetos
WiFi:SSIDeHexSSIDsão aceitos, e pelo menos um deles precisa estar presente.- Se
HexSSIDeSSIDforem definidos, os valores precisarão ser consistentes.
- Se
HiddenSSIDé compatível.AllowGatewayARPPollingnão é compatível.SignalStrengthnão é compatível.AutoConnect: esse campo determina se a rede é ativada automaticamente. Essa configuração é independente da opção de conexão automática por rede disponível para os usuários nas configurações de Wi-Fi do dispositivo.- Se definido como
true, a rede será ativada, o que significa que o dispositivo pode se conectar a ela automaticamente sem seleção explícita do usuário nas configurações de Wi-Fi, a menos que o usuário desative a conexão automática para essa rede. - Se definida como
false, a rede será adicionada à lista de redes salvas, mas não será ativada. O dispositivo não se conecta a ele automaticamente. Para que o dispositivo se conecte à rede, o usuário precisa selecionar manualmente a rede uma vez nas configurações de Wi-Fi. Depois da primeira conexão manual, a rede é tratada como ativada, e o dispositivo pode se conectar a ela automaticamente, a menos que o usuário desative a conexão automática para essa rede.
- Se definido como
Securityé obrigatório e os seguintes valores são aceitos: - None - WEP-PSK - WPA-PSK - WPA-EAP - WEP-8021X - WPA3-Enterprise_192
- Para senhas de
WEP-PSK, só são aceitas senhas de 40 bits (10 dígitos) ou 104 bits (26 dígitos). - A especificação afirma que as frases secretas
WEP-PSKprecisam começar com o prefixo0x. No entanto, para manter a consistência com o framework do Android, esse prefixo não é obrigatório. - Para definir o modo de
randomização de MAC
, use a propriedade
MACAddressRandomizationModedefinida com os valoresHardwareouAutomatic. Essa propriedade não está disponível na especificação Open Network Configuration (ONC), mas é fornecida na AMAPI e pode ser especificada ao configurar redes Wi-Fi. Isso se aplica apenas ao Android 13 ou mais recente em todos os modos de gerenciamento.- O
Hardwareusa o endereço MAC de fábrica ao se conectar à rede. - O
Automaticpermite que a estrutura do Wi-Fi decida automaticamente a estratégia de randomização de MAC. Podem ser endereços MAC persistentes ou não persistentes gerados aleatoriamente e usados ao se conectar à rede.
- O
- Objetos
EAP: ClientCertPatternnão é compatível.SaveCredentialsnão é compatível porque as credenciais são sempre salvas.UseSystemCAsnão é compatível.ServerCARefé compatível.ServerCARefsé compatível.DomainSuffixMatché compatível. As configurações sem fio corporativas sem esse campo (ou com uma lista vazia como valor) são consideradas inseguras e rejeitadas pela plataforma. Os valores precisam ser nomes de domínio válidos (por exemplo, "example.com" e "subdomain.example.com").- Os seguintes valores são aceitos para
ClientCertType:Ref,KeyPairAlias - Os seguintes valores são aceitos para
Inner:MSCHAPv2,PAP - Os seguintes valores são aceitos para
Outer:EAP-AKA,EAP-TLS,EAP-TTLS,EAP-SIM,PEAP - Objetos
Certificate:Removenão é compatível. Em vez disso, omita o certificado na configuração.TrustBitsnão é compatível.
Exemplos
Várias redes Wi-Fi
Este exemplo de fragmento de política mostra três redes Wi-Fi configuradas com
diferentes esquemas de segurança. O JSON do Open Network Configuration está aninhado no campo openNetworkConfiguration do JSON Policy.
"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"
}
}
]
}Autenticação EAP
Este exemplo de fragmento de política mostra uma rede sem fio configurada com autenticação EAP-TLS
Além do objeto NetworkConfigurations, o exemplo
inclui dois objetos Certificates para os certificados do cliente e do servidor.
"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"
}
]
}O campo ClientCertType também pode ser definido como KeyPairAlias, e o campo ClientCertKeyPairAlias pode ser usado para especificar o alias de um par de chaves KeyChain instalado (consulte DevicePolicyManager.installKeyPair) ou gerado (consulte DevicePolicyManager.generateKeyPair) usado para autenticação Wi-Fi. No Android 12 e
versões mais recentes, o par de chaves KeyChain com o alias especificado com
ClientCertKeyPairAlias é concedido para autenticação em redes Wi-Fi e é
usado para autenticação na rede Wi-Fi correspondente. Antes do Android 12,
um
nonComplianceDetail
com
motivo
API_LEVEL
é informado. Um
nonComplianceDetail
com
motivo INVALID_VALUE
e
motivo específico ONC_WIFI_KEY_PAIR_ALIAS_NOT_CORRESPONDING_TO_EXISTING_KEY
será informado se o alias do par de chaves especificado não corresponder a
uma chave existente. Confira um exemplo de política:
"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"
}
]
}O campo Security também pode ser WPA3-Enterprise_192, que é uma rede WPA-EAP
configurada com o modo de 192 bits do WPA3.
"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"
}
]
}