3 Verkkopalveluarkkitehtuuri Verkkopalvelun arkkitehtuuri perustuu yleisesti asiakas-palvelin -malliin Tietokantapohjaisessa (verkko)palvelussa asiakas-palvelin -malli toimii seuraavasti: 1. Käyttäjä käyttää palvelua asiakasohjelman avulla 2. Asiakkaan ja palvelimen välinen vuorovaikutus toteutetaan tarkoitukseen sopivalla protokollalla 3. Toiminta: asiakas tekee kyselyitä tietokantaan ja näyttää kyselyn tulokset käyttäjälle käyttöliittymässään Webissä asiakas-palvelin mallin toteuttaminen suoraan Web-selaimen ja tietokantapalvelimen yhdistelmänä on mahdollista tukevan asiakkaan avulla. Ratkaisu ei kuitenkaan ole huonon toimintavarmuutensa takia yleisesti käytössä Tietokantapohjaisen verkkopalvelun arkkitehtuuri noudattaa yleensä ns. kolmikerrosmallia (three-tier model) Kolmikerrosmallissa asiakkaana toimivan Web-selaimen ja tietokantapalvelimen väliin toteutetaan kerros, joka toimii asiakkaana tietokantapalvelimelle ja palvelimena Webselaimelle 7307010 Hypermedian ohjelmointi (kevät 2005) 37
Kolmikerrosmalli ja PHP Kurssin teknologioilla kolmikerrosmallin välikerros toteutetaan WWW-palvelimen ja PHP-ympäristön avulla: 1. Välikerroksen toiminnallisuus ohjelmoidaan PHP-kielellä 2. Selaimen ja WWW-palvelimen välinen vuorovaikutus hoidetaan tuttuun tapaan HTTP-protokollalla 3. PHP-tulkki käyttää tietokantapalvelinta asiakkaana toimivan funktiokirjaston avulla 4. Tietokantapalvelimen ja -asiakkaan välinen vuorovaikutus toteutetaan valitun tietokannan omalla protokollalla tai yleisellä Open Database Connectivity (ODBC) -protokollalla PHP tukee sekä ODBC-protokollaa että yleisimpien tietokantapalvelimien omia protokollia: MySQL, PostgreSQL, MS Access, IBM DB2, Oracle,... ODBC-protokollan käyttäminen parantaa sovelluksen siirrettävyyttä eri palvelinten välillä 7307010 Hypermedian ohjelmointi (kevät 2005) 38
Verkkopalvelun keskeiset toiminnot Verkkopalveluiden kolme keskeistä toimintoa ovat: 1. Pääsynhallinta (Access): verkkopalvelun mahdollisten käyttäjien rajoittaminen 2. Käyttäjän tunnistaminen (Authentication): verkkopalvelun käyttäjien tunnistaminen 3. Käyttöoikeudet (Authorization): verkkopalvelun toimintojen käyttöoikeuksien rajoittaminen Yksinkertaisin keino pääsynhallinnan toteuttamiseen on HTTP-protokollan HTTP Basic Authentication -mekanismin käyttäminen: WWW-resurssin noutamiseen tarvittavat tiedot välitetään HTTP-pyynnön Authorization-nimisessä otsikossa HTTP-perusautentikointia käyttävä verkkopalvelu on helppo tunnistaa tavasta, jolla selain kysyy käyttäjältä tunnuksen ja salasanan: WWW-lomakkeen sijaan tiedot syötetään taustaväriltään usein harmaaseen dialogiin, jonka sulkeminen Peruuta-painikkeella aiheuttaa HTTP-virhekoodin 401 Unauthorized Pääsynhallinta voidaan myös toteuttaa esimerkiksi IP-osoitteiden avulla (ongelmia!) 7307010 Hypermedian ohjelmointi (kevät 2005) 39
Käyttäjän tunnistaminen voidaan pääsynhallinnan tavoin toteuttaa HTTPperusautentikoinnin avulla. Pääsynhallinnan ja käyttäjän tunnistamisen ero: ensimmäisessä tunnus voi olla yhteinen joukolle ihmisiä, jälkimmäisessä jokaisella käyttäjällä on oma henkilökohtainen tunnus Yleensä käyttäjän tunnistaminen toteutetaan räätälöidyllä sovelluksella, jolloin tunnistamisen toiminnallisuus, käyttöliittymät ja esimerkiksi virheilmoitukset voidaan toteuttaa halutulla tavalla Käyttöoikeuksien hallinta voidaan toteuttaa esimerkiksi seuraavilla tavoilla: a. Erittäin yksinkertaisessa sovelluksesa käyttöoikeuksiin ei välttämättä tarvitse ottaa kantaa ollenkaan: kaikilla käyttäjillä on samat oikeudet b. Käyttöoikeudet määritellään jokaiselle käyttäjälle erikseen c. Käyttöoikeudet jaetaan käyttäjille roolien avulla: jokaisella käyttäjällä on (yksi) rooli d. Käyttöoikeudet jaetaan käyttäjille profiilien avulla: jokaisella käyttäjällä on yksi tai useampi profiili Käyttöoikeuksien jakaminen roolien avulla on toimiva ratkaisu silloin, kun palvelun käyttäjäryhmän jäsenet voidaan helposti ryhmitellä eri rooleihin. Profiilien käyttäminen mahdollistaa käyttöoikeuksien määrittelemisestä joustavammin 7307010 Hypermedian ohjelmointi (kevät 2005) 40
Käyttäjän tunnistaminen: toteuta myös nämä Rekisteröityminen: käyttäjä syöttää haluamansa tunnistetiedot (yleensä tunnus ja salasana) ja mahdollisesti muita tietoja itsestään Tunnuksen ja salasanan pituutta ja muotoa halutaan mahdollisesti rajoittaa Salasana on syytä tallentaa tietokantaan salatussa muodossa: vaihtoehtoja ovat esimerkiksi Message Digest 5 (MD5) ja Secure Hash Algorithm (SHA-1) Sisäänkirjautuminen rekisteröinnissä syötettyjen tietojen avulla (yleensä tunnus ja salasana) Mahdollisuus uloskirjautumiseen on tärkeä etenkin silloin, kun palvelua käytetään yleisiltä koneilta Palvelun toiminnoissa on voitava (helposti) tarkastaa, onko käyttäjä kirjautunut sisään. Käyttäjään liittyviin tietoihin on päästävä helposti käsiksi Käyttäjän on pystyttävä vaihtamaan salasanansa tietoturvan parantamiseksi Käyttäjät unohtavat joskus salasanansa. Käyttäjän on pystyttävä selviämään tilanteesta itsenäisesti. Ratkaisu: toiminto, jonka avulla käyttäjä voi tilata itselleen uudeen salasanan sähköpostina rekisteröitymisessä määriteltyyn osoitteeseen 7307010 Hypermedian ohjelmointi (kevät 2005) 41
Istunnon hallinta HTTP-protokollan tilattomuus on jo tuttu asia, mutta kerrataan vielä: HTTPprotokollassa ei ole sisäänrakennettua keinoa sovelluksen tilan ylläpitämiseen Sovelluksen tilan ylläpitäminen toteutetaan istuntojen (session) avulla: Sisäänkirjautuminen Sisällön/toimintojen näyttäminen käyttöoikeuksien perusteella Sovelluksen mukauttaminen käyttäjän mieltymysten (preference) perusteella Käyttäjän toiminnan seuraaminen Ostoskorin toteuttaminen Huomaa, että istuntoja voidaan hyödyntää myös ilman käyttäjän tunnistamista. Tällöin sovelluksen tilaa ei kuitenkaan voida säilyttää istuntojen välillä Asiakas-palvelin -mallissa istunto toteutetaan siten, että asiakkaalle annetaan yksikäsitteinen istunnon tunniste, jonka asiakas toimittaa takaisin palvelimelle jokaisen pyynnön yhteydessä. Istunnon tiedot säilytetään palvelimella ja niihin päästään käsiksi istunnon tunnisteen avulla 7307010 Hypermedian ohjelmointi (kevät 2005) 42
Istunnot käytännössä Istunnon tunnisteen välittämiseen on useita tapoja: Evästeet (Cookie): Eväste on (lyhyt) merkkijono, jonka verkkopalvelu välittää asiakkaalle HTTP-vastauksen mukana. Eväste tallennetaan käyttäjän koneelle joko istunnon ajaksi tai pysyvästi kovalevylle. Asiakas lähettää evästeen palvelulle jokaisen palvelupyynnön mukana. Evästeitä nimitetään usein kekseiksi, pipareiksi tai jopa taikapipareiksi HTTP GET: Istunnon tunniste sijoitetaan muiden pyynnön parametrien tapaan osaksi URI-tunnistetta (example.php?sessionid=xyz123) HTTP POST: Istunnon tunniste sijoitetaan HTML-lomakkeen piilokenttään Evästeen voimassaoloaika voidaan määritellä evästä asetettaessa. Eväste voidaan myös aktiivisesti poistaa siinä vaiheessa, kun istunto lopetetaan Istunnot ovat erittäin keskeisessä roolissa verkkopalvelun toiminnallisuuden toteuttamisessa. Esimerkiksi yleiskäyttöinen ostoskorin toiminnallisuus toteutetaan istuntojen avulla Istuntoihin palataan myöhemmin kurssin kuluessa 7307010 Hypermedian ohjelmointi (kevät 2005) 43
Verkkopalvelun turvallisuus Verkkopalvelun turvallisuuteen liittyviä seikkoja: Luottamuksellisen tiedon näkyvyys Tiedon häviäminen tai tuhoutuminen Tiedon muokkaaminen Palvelun saatavuuden katkeaminen (denial of service) Virheet ohjelmistossa Kiistäminen (repudiation): toiminnossa osallisena ollut taho kiistää osallistumisensa (tavaran tilaaminen, maksullisen palvelun käyttäminen Tietoturvan toteuttamisessa on tehtävä kompromissi verkkopalvelun käytettävyyden, suorituskyvyn, kustannustehokkuuden ja turvallisuuden välillä. Esimerkkejä Salasanan säännöllinen kysyminen verkkopankissa heikentää käytettävyyttä Tiedon salaaminen syö palvelimen resursseja Paikkansa pitävä teesi: tietoturva on ennen kaikkea asennekysymys! 7307010 Hypermedian ohjelmointi (kevät 2005) 44
Verkkopalvelu: yleisiä ominaisuuksia Verkkopalvelut sisältävät näennäisestä erilaisuudestaan huolimatta lukuisia yleisiä ominaisuuksia: Uutisten lisääminen, muokkaaminen ja julkaiseminen (esim. RSS-muoto) Verkkopalvelun kansainvälistäminen (i18n) ja paikallistaminen (l10n) Erilliset tai integroidut ylläpitäjän työvälineet (esim. käyttäjien hallinta) Tiedonhaun apuvälineet Sovelluksen räätälöinti sivupohjien avulla Monikanavaisuus (laiteriippumattomuus & saavutettavuus) Käytön tilastointi ja analysointi Sisällön ylläpitämisen työvälineet Mielipidekyselyt, äänestäminen Keskustelualue, vieraskirja, kalenteri, ostoskori,... Verkkopalvelun toimintojen suunnittelumantra: Lisää/Poista/Muokkaa/Kopioi 7307010 Hypermedian ohjelmointi (kevät 2005) 45
Lopuksi Sekä verkkopalvelun teknisestä arkkitehtuurista että toiminnallisuudesta löytyy verkkopalvelusta toiseen toistuvia tekijöitä Näiden toistuvien tekijöiden tunnistaminen on erittäin hyödyllistä: Verkkopalvelun toiminnallisuuden suunnittelutyö voidaan ainakin osittain tehdä uusien toimintojen keksimisen sijaan olemassa olevista vaihtoehdoista valitsemalla ja/tai vaihtoehtoja räätälöimällä Verkkopalvelujen toteuttamisen tueksi voidaan rakentaa yleinen kehysjärjestelmä, joka minimoi toteutustyöhön liittyvät rutiinit ja antaa mahdollisuuden varsinaisen sovelluslogiikan toteuttamiseen PHP-kieli mahdollistaa tietokantojen helpon käyttämisen ja tukee esimerkiksi istuntojen hyödyntämistä ja muita yleisiä toimintoja PHP-sovellusten tekemisen tueksi löytyy myös eritasoisia ohjelmistokehyksiä, joihin tutustuminen on erittäin suositeltavaa ennen laajempien järjestelmien toteuttamista Ohjelmistokehyksiä ei välttämättä tarvitse käyttää suoraan tärkeämpää on ideoiden hyödyntäminen ja esimerkiksi omien tarpeiden mukaisen kehysjärjestelmän toteuttaminen 7307010 Hypermedian ohjelmointi (kevät 2005) 46