Bruke sikrede ArcGIS for Server- tjenester i FME

En av de mange mulighetene som finnes i FME er å bruke data som er publisert som en tjeneste på ArcGIS for Server. Du kan i FME bygge opp et såkalt REST-kall mot denne tjenesten. Dette er formatert som en standard URL som også fint lar seg åpne i en nettleser.

Dersom du ønsker å bruke en tjeneste fra Geodata Online sitt bibliotek av (sikrede) tjenester må du i URL-en du bygger opp også få med en tekststreng som kalles et Token. Dette Tokenet gjør at du autentiserer deg som gyldig bruker hos Geodata Online og får tilgang til de tjenestene du ønsker.

Lage et Token

For å lage et slikt Token må du inn på REST-endpointet til den ArcGIS for Server hvor tjenesten ligger. For Geodata Online sitt tilfelle så er dette adressen: http://tokens.geodataonline.no/arcgis/tokens/generateToken.

Her skriver du inn brukernavnet og passordet du har fått fra Geodata Online, og så velger du blant tre ulike valgmuligheter for å kunne begrense mulighetene til å kunne (mis)bruke Tokenet du setter opp.

  • HTTP Referer
  • IP
  • Request IP

Request IP finner automatisk IP-adressen til maskinen som Tokenet blir opprettet fra, og låser Tokenet til kun å være gyldig fra denne IP-adressen.

Valget IP lar deg spesifisere en IP-adresse som kallet mot tjenesten må komme fra for at Tokenet skal være gyldig. Dette kan være IP-adressen til din egen maskin, eller IP-adressen til en proxyserver som trafikken ut til Geodata Online rutes gjennom.

HTTP Referer låser Tokenet til kun å være gyldig dersom det kommer fra en spesifikk http-adresse, f.eks. http://www.geodata.no. Forsøker du å få tilgang til tjenestene utenfor denne adressen, vil ikke Tokenet være gyldig. Etter du har valgt ett av disse alternativene angir du hvor lenge Tokenet skal være gyldig, og hvilket format den krypterte tekststrengen skal leveres på.

Det siste valget er ikke så relevant i dette tilfellet, men er viktig om du ønsker å opprette nye Tokens med kort levetid for hver gang du ønsker å bruke en tjeneste fra en ArcGIS for Server. Dette er også mulig i FME, men vil ikke gjennomgås i denne guiden.

Resultatet ser noe slikt ut. Kopier denne tekststrengen.

Bruke Tokenet i FME

Tilbake i FME må du som nevnt lage en URL som inneholder både sti til tjenesten du ønsker å benytte deg av, og Tokenet du nettopp har laget. Til dette kan du f.eks. bruke transformeren StringConcatenator. I dette eksempelet har jeg brukt karttjenesten som inneholder alle de administrative grensene i Norge. Du skriver inn URL til tjenesten og legger til «?&token=<ditt token>», som kan sees av skjermdumpen.

Neste steg er å bruke transformeren HTTPFetcher og legge inn denne URL-en for å koble seg opp til Geodata Online og hente ut resultatet fra de dataene du spør etter i URL-en. Har du har valgt IP eller Request IP, og FME er installert og kjører på en gyldig IP-adresse spesifisert for Tokenet som er generert, vil du ikke behøve å gjøre noe annet enn å spesifisere URL-en du har laget.

Brukte du derimot HTTP Referer så må dette spesifiseres i HTTPFetcher-transformeren, siden en URL ikke sender med noen http-referer automatisk (Dette er også tilfelle i en vanlig nettleser, og et Token laget på denne måten vil derfor ikke automatisk fungere der heller). I HTTPFetcher-transformeren spesifiserer du en http-referer under HTTP Request Headers. Der skriver du f.eks. som i dette tilfellet «Referer: https://www.geodata.no». Det er viktig at dette er den samme adressen du skrev inn da du laget selve Tokenet hos Geodata Online.

Disse dataene kan du f.eks. bruke videre i kombinasjon med dine egne data, om du f.eks. ønsker å finne ut hvilke administrative grenser som er gjeldende for disse. Det er selvfølgelig også mulig å bruke standard funksjonalitet i FME og gjøre dette til brukerstyrte parametere, og det er da også mulig å bruke disse videre til å bygge opp en dynamisk URL som spør direkte mot tjenesten etter disse. I URL-en er det også mulig å spesifisere at resultatene skal leveres på JSON i stedet for HTML om dette er ønskelig, i tillegg til flere andre valg som man kan bruke REST til.