Jūs instalējat profilu, tunelis paceļas, un viss izskatās pabeigts. Tad tālrunis pārstartējas, on-demand pamodina savienojumu bez lietotnes priekšplānā, un tunelis atsakās sākties. Profils joprojām ir, un parole joprojām ir pareiza, tāpēc šī kļūme liek cilvēkiem meklēt nepareizajā vietā. Network Extension nevar nolasīt jūsu noslēpumu no profila: tam vajag atslēgu piesaistes atsauci, ko tas pats var atrisināt.

Zemāk esošā gaita seko vienam savienojuma mēģinājumam caur šo nodošanu, no vaicājuma, kas veido atsauci, līdz pārstartēšanai, kas to pārbauda.

Profils glabā rokturi, nevis noslēpumu

NEVPNProtocol atklāj passwordReference un sharedSecretReference ne velti. Kad dēmons sāk tuneli, tas var nedarboties jūsu procesā, tāpēc tas nevar izsaukt jūsu kodu un prasīt paroli. Tas nolasa pastāvīgu atslēgu piesaistes atsauci, atrisina to savā kontekstā un pats iegūst vienumu.

Jūs veidojat šo atsauci, prasot to atslēgu piesaistei, un tas ir cits pieprasījums nekā datu pieprasījums:

let query: [String: Any] = [
  kSecClass as String: kSecClassGenericPassword,
  kSecAttrService as String: "vpn-credentials",
  kSecAttrAccount as String: "user",
  kSecReturnPersistentRef as String: true,
  kSecMatchLimit as String: kSecMatchLimitOne
]

Nododiet atgriezto objektu protokolam, nevis vienuma datus. Praksē profils reģistrē, kur dzīvo noslēpums, tāpēc konfigurācijas dublējums klusi nedublē paroli plist failā.

Kāpēc API atbild -50

errSecParam nozīmē, ka pieprasījums vai vērtība šai darbībai bija nepareizi veidota, un tā ir kļūda, ko visbiežāk redz, kad atsauces un datu pieprasījumi sajaucas. Datu pieprasīšana, kamēr saņēmējs kods gaida atsauci, neapstrādātu baitu piešķiršana passwordReference laukam vai vaicājums ar piekļuves grupu, ko lietotne nevar izmantot, to visu rada.

Ietinējbibliotēkas uz to aicina. Palīgfunkcija, kas atgriež baitus, nav aizstājama ar to, kas atgriež atsauci, tāpēc labojums parasti ir cits vaicājums, nevis cita parole.

Tā pati neatbilstība izskaidro profilu, kas saglabājas bez iebildumiem un pēc tam neizveido savienojumu: saglabātais ir blob, nevis rokturis, un dēmonam nav ko atrisināt.

Saglabājas labi, neizdodas savienojoties

Saglabāšana izmanto jūsu lietotnes kontekstu. Savienošanās izmanto dēmona kontekstu, un abiem nav vienādas piekļuves. Tāpēc profils var izturēt visus simulatorā veiktos testus un neizdoties pirmajā on-demand palaišanā.

Tāda pati ir pārstartēšanas simptoma forma: tas strādā, kamēr lietotne ir atvērta, un mirst, kad sistēma pati palaiž tuneli.

Pirms izlaišanas apzināti pārbaudiet fona ceļu. Ierosiniet on-demand savienojumu ar aizvērtu lietotni, pēc tam lasiet ierīces konsoli, nevis lietotnes žurnālu, jo kļūmi reģistrē process, kas mēģināja atrisināt atsauci. Ja konsolē redzams, ka dēmons noraida vienumu, atsauce ir kārtībā un problēma ir vienuma pieejamība.

Pieejamība izšķir, vai pārstartēšana strādās

Vienumam jābūt lasāmam jebkuram sistēmas procesam, kas palaiž tuneli, un tā ir plašāka auditorija nekā jūsu lietotne priekšplānā. Šis ierobežojums izvēlas pieejamības atribūtu jūsu vietā. Vienums, kas aizsargāts līdz pirmajai atslēgšanai, ir pieejams fona palaišanai pēc tam, kad ierīce ir vienreiz atslēgta; vienums, kas prasa, lai ierīce būtu atslēgta tieši tagad, nav.

Stingrākās klases izvēle ir vilinoša, un tieši tā salauž on-demand profilu bloķētā tālrunī.

Pēc klases maiņas izveidojiet vienumu no jauna, nevis rediģējiet atribūtus esošajam, un pēc tam vēlreiz saglabājiet protokolu ar svaigu atsauci. Atribūtu izmaiņas esošam vienumam ne vienmēr dod dokumentācijas netiešo uzvedību, un no jauna būvēts vienums novērš šaubas.

Rotācija ir vieta, kur sapūst saglabātie profili

Paroles maiņa atslēgu piesaistē automātiski nemaina to, uz ko norāda saglabātais profils. Vienuma dzēšana ir sliktāka: profils tur atsauci uz kaut ko, kas vairs neeksistē, un kļūme izskatās kā autentifikācijas noraidījums.

Rotējiet vienā secībā. Atjauniniet vienumu, pieprasiet jaunu pastāvīgu atsauci, vēlreiz saglabājiet protokolu, pēc tam savienojieties ar aizvērtu lietotni, lai pierādītu, ka dēmons to joprojām var atrisināt. Turiet lietotāja paroli un kopīgo noslēpumu atsevišķos vienumos, lai katrs rotētu pēc sava grafika, un nekad nelogojiet vaicājuma vārdnīcu vai pašu atsauci. Rokturis nav noslēpums, bet tas ir karte uz to.

Saistītie raksti