Slik kallar du eit internt API frå ein iPhone-app over VPN
Klassifiser den feilande førespurnaden etter NSURLError-koden før du rører tunnelen, og reparer deretter nøyaktig det laget som faktisk gjekk i stykker.
API-et svarar i Safari på same telefon, medan førespurnaden til appen går ut på tid. Dette gapet er vanlegvis ikkje tunnelen: ein app som kallar ein intern teneste, sender ein vanleg HTTPS-førespurnad, og VPN-en som allereie finst på eininga avgjer berre om førespurnaden har ei rute. Å skrive ein andre tunnel inn i appen er ei produktavgjerd, ikkje ein reparasjon for eit tidsavbrot. Det som følgjer, klassifiserer feilen etter kvar han oppstår, ved hjelp av feilflata appen allereie har.
Start med feilen, ikkje tunnelen
URLSession rapporterer transportfeil som NSError verdiar i NSURLErrorDomain, og koden er det billigaste beviset som finst. Før du endrar noka konfigurasjon, logg den koden saman med vertsnamnet som feilar og den medgåtte tida til oppgåva. Eit tidsavbrot, ein namnefeil og ein tillitsfeil ser like ut på skjermen og krev tre ulike reparasjonar. Klassifiser først, og les deretter avsnittet for den klassen.
Oppgåvemålingar svarar på oppfølgingsspørsmålet, om ei tilkopling nokon gong vart oppretta, noko som skil ein førespurnad som aldri hadde ei rute frå ein som serveren brukte for lang tid på å svare på. Ingenting av dette krev at tunnelen vert endra; det krev at diagnostikken til førespurnaden sjølv vert skriven ut ein stad du kan lese han.
Namneoppslag feilar før noko anna kan
Eit kort kontornamn som api.corp.example avheng vanlegvis av eit søkedomene telefonen ikkje har, så appen slår opp eit namn som berre finst inne i bygningen. NSURLErrorCannotFindHost er signaturen. Det fullstendige vertsnamnet må slåast opp gjennom den oppløysaren VPN-en installerer, og appen bør be om den fullt kvalifiserte forma når søkedomenet ikkje er garantert. Å bytte namnet mot ei adresse og slå av sertifikatkontrollar flyttar feilen i staden for å reparere han.
Ein privat DNS-post og eit sertifikat utstedt for nøyaktig det namnet er det støtta paret. Alt anna er ein omveg som vert send til brukarane.
Eit tidsavbrot er eit spørsmål om rute, ikkje om namn
NSURLErrorTimedOut betyr at namnet vart slått opp og ingenting svara, noko som peikar på ruta, pakkepolicyen eller tenesta. Når tunnelen vert tildelt per applikasjon, seier ein annan app som når den same serveren ingenting om bygget ditt, fordi den tilordninga ikkje vert delt. Kontroller at pakken du køyrer er innanfor den tildelinga, og kontroller deretter at tenestestien er tillaten for han. Eit utviklingsbygg installert utanfor tildelinga kan ligge heilt utanfor tunnelen og sjå ut som eit øydelagt API.
Ein nettlesarsamanlikning viser at ein eller annan app på eininga har ei rute. Ho beviser aldri at bygget ditt har det, og difor må dei to testane køyrast kvar for seg.
Tillitsfeil handlar om namnet på sertifikatet
NSURLErrorServerCertificateUntrusted saman med TLS-feilen under betyr at kjeda eller identitetskontrollen feila. Ein intern CA må vere klarert på eininga, og eit sertifikat utstedt til eit anna vertsnamn er framleis feil etter kva som helst omkonfigurering av nettverket. Apples rettleiing for App Transport Security gjeld framleis for desse URL-lastande tilkoplingane, og ein tunnel rundt ei vanleg HTTP-teneste gjer ikkje den tenesta sikker ende-til-ende.
Reparer identiteten eller tillitsankeret og hald unntakslista tom. Eit generelt unntak for vilkårleg lasting gøymer feilen under utvikling og lèt han stå for kvar brukar etterpå.
Ei HTTP-avvising høyrer til appen, ikkje nettverket
Ein 401 eller 403 på eit fullført handtrykk betyr at førespurnaden kom og tenesta avviste han, så det gjenståande spørsmålet er ein konto, ei tokenmålgruppe, eit omfang eller ein nøkkel. Logg statuskoden og vertsnamnet, aldri bærartokenet eller svarteksten. På det tidspunktet gjer tunnelen jobben sin, og ytterlegare nettverksendringar utset berre den verkelege rettinga.
Tabellen er klassifiseringa du bør ha ved terminalen: éi rad per feil appen faktisk kan rapportere. Skriv ut koden før du les han, fordi rada du vel avgjer kva avsnitt du arbeider gjennom.
| Where it fails | What the app sees | First check |
|---|---|---|
| name resolution | NSURLErrorCannotFindHost (-1003) | resolve the fully qualified name from the device itself |
| no path, or no answer | NSURLErrorTimedOut (-1001) | is this bundle inside the per-app mapping, and is the service path allowed |
| TLS trust | NSURLErrorServerCertificateUntrusted (-1202) | does the certificate name match the host, and is the internal CA trusted |
| service refusal | HTTP 401 or 403 after a completed handshake | account, token audience, scope or key |
Kvar rad er billegare å teste enn den under, og kvar utelukkar eit anna lag av den same førespurnaden. Gå nedover tabellen til ei rad passar, og slutt deretter å endre nettverket.