API liides

REST API

Võimaldab teha absoluutselt kõiki toiminguid, mida kasutajaliides võimaldab ja enamgi. Küsimuste puhul palume ühendust võtta.

Autentimine

Kasutaja autentimiseks on kasutusel JSON Web Token-eid (JWT), mille väljastame sisse logivale kasutajale ning mille kehtivusaeg on 10 ööpäeva.

Juhul, kui kasutajalt soovitakse ära võtta ligipääs koheselt on võimalik märkida kasutaja mitte aktiivseks ning vaatamata sellele, et väljastatud JWT-i veel kehtib, kaob kasutajal ligipääs koheselt.

JWT hoiustatakse kasutaja browseris, kuid välja logimis nuppu vajutades see kustutatakse. Samuti kasutab kasutajaliides suurel hulgal päringute salvestamist (Cache) Igal lehe laadimisel kuvatakse eelnev seis ja paralleelselt värskendatakse. Peame selle üle vaatama ning välja logimisel ka selle korrektselt ära nullima.

Antud hetkel ei ole soovitatav kasutada Saagot avalikult kasutatavas arvutites, kuna avab ukse "session highjacking" rünnakuks.

Turvalisus

Andmed on hoiustatud AWS pilves jagatud andmebaasis (Multi tenant). Saame pakkuda ka standalone võimalust ja füüsilist andmete isoleeritust, kuid sellega kaasnevad lisakulud ja ökosüsteemi piirangud.

Andmetele ligipääs on piiratud Postgres Row Level Security (RLS) reeglitega. Illustreeriv näide andmete voost Saago süsteemis:

  1. HTTPS
  2. JWT (Päringu päises)
  3. Saago REST API loeb päringu päisest tokeni, seostab selle kasutajaga ning rolliga kuhu kasutaja kuulub. Lisaks valideeritakse kas kasutaja on aktiivne ja tal on lubatud süsteemile ligi pääseda.
  4. Rolli alusel rakendub Method Level Security - otsustatakse, kas kasutaja võib antud toimingut teostada. Nt. Loo uus ülesanne.
  5. Juhul, kui kasutaja võib antud toimingut teostada määratakse antud programmi valduses olevale lõimele (CPU Thread) kasutaja autentimisega seotud info.
  6. Juhul, kui andmebaasist on vaja midagi lugeda / kirjutada reserveeritakse andmebaasi ühendus (Connection pool) ning seatakse ühendusega seotud parameeter "TENANT_ID" ja muud vajalikud väärtused.
  7. Päringu dünaamilisel ehitamisel rakendatakse Access Control List (ACL) -i alusel filtrite tingimused, mis piiravad ühe "Tenant"-i piires kasutajate andmete nähtavuse.
  8. Saadetakse päring andmebaasi, milles rakendub RLS ja antud ühendusele on näha vaid need andmed, mis on antud "Tenant"-ile lubatud näha.
  9. Rakendus saab andmebaasist andmed ning ei väljasta neid samal kujul (Iga väli, mis väljastatakse peab olema eraldi lubatud)
  10. Andmeid töödeldakse vastavalt "context"-ile milles antud kasutaja neid nägema peab. (Allhankija, klient ja ülesande looja näevad erinevat infot ja API väljastab infot erinevalt)

Päringuid töötleme sünkroonselt, tagamaks selle, et ei tekiks konflikte programmi lõimede ja andmebaasi ühenduste vahelises de-sünkroniseerimises.

Andmebaas ise ei ole avalikult kättesaadav ning ligipääs on antud vaid Saago rakendusele, mis jookseb Docker-i konteineri sees AWS pilves.

Paroolide hoiustamine

Paroolid on räsitud (Hashed) kasutades HMAC-SHA-3 (512bit) algoritmi ning minimaalne parooli pikkus on seatud 15-le tähemärgile.

Failisüsteem

  • Failid ei ole avalikult ligipääsetavad.
  • Saago failisüsteem on virtuaalne - See võimaldab ühendada mitmeid failisüsteeme (Nt. Google Drive, DropBox jpm) ühtseks failisüsteemiks, ilma, et peaks faile selleks füüsiliselt liigutama.