Za pomocą zasad możesz skonfigurować sieci Wi-Fi na urządzeniu. Interfejs Android Management API korzysta z formatu Open Network Configuration, standardowego formatu opartego na JSON, który został pierwotnie opracowany w ramach projektu Chromium.
Aby uwzględnić konfigurację otwartej sieci w zasadach, ustaw pole
openNetworkConfiguration w zasobie
Policy.
W przypadku urządzeń w pełni zarządzanych możesz opcjonalnie uniemożliwić użytkownikowi ręczne skonfigurowanie ustawień Wi-Fi na urządzeniu, ustawiając wartość wifiConfigDisabled na true w zasobie Policy.
Obsługiwane funkcje
Interfejs Android Management API obsługuje tylko podzbiór specyfikacji Open Network Configuration.
- Obiekt najwyższego poziomu:
- Pole
Typemusi zostać pominięte lub mieć wartośćUnencryptedConfiguration. Nie ma potrzeby szyfrowania konfiguracji sieci w zasadach, ponieważ całe zasady są szyfrowane w usłudze Android Management API. Dodatkowo istnieje druga warstwa szyfrowania informacji poufnych, takich jak hasła i klucze prywatne.
- Pole
NetworkConfigurationobiekty:GUID,Name,TypeiWiFito obsługiwane pola, które są wymagane.ProxySettingsto pole opcjonalne. Jeśli jest używana, obsługiwane są tylkoManualiPAC(automatyczna konfiguracja serwera proxy).- Pole
Typemusi mieć wartośćWiFi. Inne typy sieci nie są obsługiwane.
WiFiobiekty:- Atrybuty
SSIDiHexSSIDsą obsługiwane i co najmniej jeden z nich musi być obecny.- Jeśli ustawione są zarówno
HexSSID, jak iSSID, wartości muszą być spójne.
- Jeśli ustawione są zarówno
HiddenSSIDjest obsługiwane.AllowGatewayARPPollingnie jest obsługiwany.SignalStrengthnie jest obsługiwany.AutoConnect: to pole określa, czy sieć jest automatycznie włączana. To ustawienie jest niezależne od opcji automatycznego łączenia z siecią dostępnej dla użytkowników w ustawieniach Wi-Fi urządzenia.- Jeśli ustawisz wartość
true, sieć będzie włączona, co oznacza, że urządzenie może łączyć się z nią automatycznie bez wyraźnego wyboru użytkownika w ustawieniach Wi-Fi, chyba że użytkownik wyłączy automatyczne łączenie z tą siecią. - Jeśli ta opcja jest ustawiona na
false, sieć zostanie dodana do listy zapisanych sieci, ale nie będzie włączona. Urządzenie nie połączy się z nią automatycznie. Aby urządzenie połączyło się z siecią, użytkownik musi ją jednorazowo wybrać ręcznie w ustawieniach Wi-Fi. Po pierwszym ręcznym połączeniu sieć jest traktowana jako włączona i urządzenie może się z nią łączyć automatycznie, chyba że użytkownik wyłączy automatyczne łączenie z tą siecią.
- Jeśli ustawisz wartość
Securityjest wymagany. Obsługiwane są te wartości: - None - WEP-PSK - WPA-PSK - WPA-EAP - WEP-8021X - WPA3-Enterprise_192
- Atrybuty
- W przypadku
WEP-PSKhaseł obsługiwane są tylko hasła 40-bitowe (10-cyfrowe) lub 104-bitowe (26-cyfrowe). - Specyfikacja mówi, że
WEP-PSKhasła wielowyrazowe muszą zaczynać się od przedrostka0x. Jednak ze względu na spójność z platformą Android ten prefiks nie jest wymagany. - Aby ustawić tryb randomizacji adresu MAC, użyj właściwości
MACAddressRandomizationModez wartościamiHardwarelubAutomatic. Ta właściwość jest niedostępna w specyfikacji Open Network Configuration (ONC), ale jest dostępna w AMAPI i można ją określić podczas konfigurowania sieci Wi-Fi. Dotyczy to tylko Androida 13 lub nowszego we wszystkich trybach zarządzania.Hardwareużywa fabrycznego adresu MAC podczas łączenia się z siecią.Automaticpozwala platformie Wi-Fi automatycznie decydować o strategii losowego generowania adresów MAC. Mogą to być stałe lub niestabilne losowo generowane adresy MAC, które są używane podczas łączenia się z siecią.
EAPobiektów:ClientCertPatternnie jest obsługiwany.SaveCredentialsnie jest obsługiwany, ponieważ dane logowania są zawsze zapisywane.UseSystemCAsnie jest obsługiwany.ServerCARefjest obsługiwane.ServerCARefsjest obsługiwane.DomainSuffixMatchjest obsługiwane. Konfiguracje bezprzewodowe dla firm bez tego pola (lub z pustą listą jako wartością) są uważane za niebezpieczne i odrzucane przez platformę. Wartości powinny być prawidłowymi nazwami domen (np. „example.com”, „subdomain.example.com”).- W przypadku parametru
ClientCertTypeobsługiwane są te wartości:Ref,KeyPairAlias - W przypadku parametru
Innerobsługiwane są te wartości:MSCHAPv2,PAP - W przypadku parametru
Outerobsługiwane są te wartości:EAP-AKA,EAP-TLS,EAP-TTLS,EAP-SIM,PEAP Certificateobiekty:Removenie jest obsługiwany. Zamiast tego pomiń certyfikat w konfiguracji.TrustBitsnie jest obsługiwany.
Przykłady
Wiele sieci Wi-Fi
Ten fragment zasad pokazuje 3 sieci Wi-Fi skonfigurowane z różnymi schematami zabezpieczeń. Plik JSON konfiguracji Open Network Configuration jest zagnieżdżony w polu openNetworkConfiguration pliku 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"
}
}
]
}Uwierzytelnianie EAP
Ten fragment przykładowej zasady pokazuje sieć bezprzewodową skonfigurowaną z uwierzytelnianiem EAP-TLS. Oprócz obiektu NetworkConfigurations przykład zawiera 2 obiekty Certificates dla certyfikatów klienta i serwera.
"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"
}
]
}Pole ClientCertType można też ustawić na KeyPairAlias, a pole ClientCertKeyPairAlias może służyć do określania aliasu zainstalowanej (patrz DevicePolicyManager.installKeyPair) lub wygenerowanej (patrz DevicePolicyManager.generateKeyPair) pary kluczy KeyChain, która jest używana do uwierzytelniania Wi-Fi. W przypadku Androida 12 i nowszych wersji para kluczy KeyChain z aliasem określonym za pomocą ClientCertKeyPairAlias jest przyznawana do uwierzytelniania w sieciach Wi-Fi i używana do uwierzytelniania w odpowiedniej sieci Wi-Fi. W przypadku Androida 12 i starszych wersji podawana jest nonComplianceDetail przyczyna API_LEVEL. A
nonComplianceDetail
with
INVALID_VALUE
reason and
ONC_WIFI_KEY_PAIR_ALIAS_NOT_CORRESPONDING_TO_EXISTING_KEY
specific reason jest zgłaszany, jeśli określony alias pary kluczy nie odpowiada istniejącemu kluczowi. Oto przykładowe zasady:
"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"
}
]
}Pole Security może też mieć wartość WPA3-Enterprise_192, która oznacza sieć WPA-EAP skonfigurowaną w 192-bitowym trybie 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"
}
]
}