Sziasztok!
Érdekelne pár ember véleménye.
Mobil applikációt fejlesztetünk külsős céggel. Az applikációnak hozzá kell férnie egy halom szenzitív adathoz, pl ügyfél adatokhoz. (az applikációban belépett ügyfél saját adataihoz).
A szerverünkön egy webservice adja meg ennek a lehetőséget.
Eddig ezekhez a WS-ekhez csak szerver oldalról lehetett kapcsolódni (pl egy másik php-s rendszerből), azok is saját rendszerek voltak. Ergó ott megoldottuk egyszerűen. Csak 443-as porton van nyitva a domain és csak valid kliens cert-el lehet túljutni a webszerveren, azon belül pedig username/jelszó amit már a rendszer csekkol (php).
Most ugyanezt kéne megoldani, de a mobil applikációval, ami kb azt jelenti, hogy kitesszük a netre free2play módba az api elérést. Természetesen bármilyen védelmet is építünk bele a mobil app-ba, azt ki tudja szedni az aki visszafejti. A cél természetesen az, hogy az aki belép az app-ba, az csak a saját adataihoz férjen hozzá, tehát ha fel is töri az app-ot, akkor csak az adott ügyfél adataihoz férhet hozzá.
Két lehetőség van:
Client ssl vagy token.
A tokent nem kell magyaráznom, beépítünk pl oauth2-t és az adott generált tokennel tud belépni. Ha feltörik a telót, akkor lelopják a tokent és azzal tudnak baromkodni az adott ügyfélnél, amíg le nem tiltjuk.
Én az ssl felé vonzódom jobban:
Amikor az app-on belül a user sikeresen bejelentkezik, akkor (az app) generál egy rsa privát kulcsot. A user jelszavával le is védi (a jelszót előtte salt-ozza), a jelszót letárolja a telefon egy biztonságosabb storage-jában, vagy a memóriában.
A kulcs segítségével generál egy certificate request-et és beküldi a WS-nek aki generál neki egy cert-et. A cert-be belepakol egy adag adatot ami az ügyfélre utal (név, email, valami egyedi azonosító hash).
Utána ezzel a cert-el tudja az app azonosítani magát a WS felé. A cert-nek beállítható lejárati idő is, olyankor újat kell igényelni.
Természetesen a telefon feltörésével kinyerhető a privát kulcsot feloldó jelszó hash, kinyerhető a kulcs és a cert is. Utána az app-on kívül is meg tudja hívni az ember a WS-t. A cert-ben ott lesz a neve és mail címe is, ami egyértelműen megmondja, hogy az az övé.
A cert-es megoldás nekem sokkal jobban tetszik. Szerintem az átlag script kiddie kevésbé tudja használni, és ha valaki mégis kiszedi, akkor is 2x meggondolja, hogy kiadja e bárkinek, hisz az ő adataihoz van hozzáfűzve az egész. Még jogilag is jobban védhető az egész, hogy nem egy kódsort loptak el vagy generáltak le, hanem a készülékből nyerték ki az adatot.
A tokenes megoldásban az a jó, hogy egyszerűbb. És persze mostanában az a trendi.
Nem utolsó sorban, ha jól tudom, akkor a tokeneknél a szerver adja a secret-et is, az ssl esetében viszont csak a telefonon lesz meg a privát kulcs, sehol máshol. Az is lejelszavazva. Beállítható akár az app-ban, hogy x idő után kérje újra a jelszót a feloldáshoz.
Mit gondoltok?