Bruk av sikrede tjenester i Silverlight
Kategori: ArcGIS Server 10 February 2010
Av og til er det ønskelig å benytte sikrede tjenester som f.eks GeocacheBasis fra GeodataOnline i Silverlight Webapplikasjoner. Det er i utgangspunktet to metoder for å sikre tjenester i ArcGIS Server, token-modellen og HTTP autentisering. Siden token-modellen er vanligst er det denne vi tar utgangspunkt i dette blogginnlegget.
En token kan man lage ved å gå til en egen “getToken.html”-side på ArcGIS Server installasjonen eller man kan gjøre et http-kall til siden. For å minimere misbruk er det vanlig å sende med enten en HTTP-referrer (URL’en til applikasjonen som bruker tjenesten) eller IP-adresse (til klienten som kaller tjenesten).
Problemet er at Silverlight ikke sender med HTTP-referrer i HTTP-kall (ESRI har gjort Microsoft klar over problemet). For å omgå dette er det par mulige løsninger:
- Bruke en proxy-side – problemet da er at all trafikk går igjennom denne, og den er vid åpen for andre å bruke med mindre man legger proxy’en i selve webapplikasjonen og sikrer denne.
- Gjøre et http-kall fra klienten til token-siden, og så sette token i klientkoden – problemet da er at brukeren kan se på HTTP-trafikken og se brukernavn/passord.
Et annet alternativ kan være:
- Bruk en ASPX-side med codebehind som “host-page” (den siden som pakker inn Silverlight-applikasjonen din). Default er vel dette en HTML-side. Kopier f.eks. HTML-koden over i default.aspx.

- I aspx-siden, under object-elementet som refererer xap-filen (f.eks Default.aspx) legg til en parameter som er tilgjengelig fra codebehind-filen:

- I codebind-filen (f.eks default.aspx.cs) sin Page_Load legger du til denne linjen:

- Legg også til funksjonene GetToken() og GetContent() i codebehind-filen (f.eks default.aspx.cs):

- Sjekken på 127.0.0.1 er for å kunne kjøre under localhost (da blir IP’en dette, og ikke den IP’en du har når du treffer den eksterne ArcGIS Serveren).
- GetContent() returnere teksten fra en HTTP GET
- Husk å sette inn riktig URL til getToken-siden, samt gyldig brukernavn og passord.
- Neste steg er å bruke token parameteren i Silverlight-koden.
- Legg til følgende i Application_Startup i App.xml.cs filen:

- Dermed ligger token’et som en ressurs, og kan settes på de nødvendige layer objektene i Map-kontrollen XAML-filen (f.eks MainPage.xaml) slik: