Felhasználó azonosítás, desktop kliens - webes adatbázis
Sziasztok!
A címet kicsit bővebben kifejtve:
Példának okáért van egy desktop alkalmazás amivel egy webshopot adminisztrálok.
Mi a bevett módja (ha van ilyen) a felhasználó azonosításnak, ha a desktop programból a webes adatbázist akarom buherálni? Az adatokkal együtt elküldöm mindig a felhasználónév/jelszó párost is? Ez nekem kicsit fapados megoldásnak tűnik, de így elsőre nem jutott jobb eszembe.
Üdv, laci
■ A címet kicsit bővebben kifejtve:
Példának okáért van egy desktop alkalmazás amivel egy webshopot adminisztrálok.
Mi a bevett módja (ha van ilyen) a felhasználó azonosításnak, ha a desktop programból a webes adatbázist akarom buherálni? Az adatokkal együtt elküldöm mindig a felhasználónév/jelszó párost is? Ez nekem kicsit fapados megoldásnak tűnik, de így elsőre nem jutott jobb eszembe.
Üdv, laci
A programból közvetlenül éred
Ebben szerintem nincs igazad
Egyik, amit a 2.-ban írtam: valódi desktop alkalmazás egyszer/alrendszerenként egyszer/stb. kapcsolódik, nem szükséges minden parancshoz újra azonosítani magát, mert van egy permanens kapcsolata, ami a kijelentkezésig/processz bezárásáig nem szűnik meg.
Másik: a perzisztens kifejezést kicsit másra szokták használni, amennyire tudom. (lásd pl. PHP)
persistent
Tudom, mit jelent a szó, de
Hasonlítsd össze a PHP-ben használt perzisztens kapcsolatokat mondjuk azzal, amikor belépsz egy mysql kliensbe, majd kilépsz!
Előbbinél a kapcsolat nyitva van, míg ... (már nem tudom, hogy amíg fut a webszerver v. van valami egyéb timeout), utóbbinál ugyan meg van nyitva, míg ki nem lépsz a kliensből vagy te le nem zárod, de ettől azt nem fogják perzisztensnek nevezni akkor sem, ha órákig/napokig/stb. meg van nyitva.
desktop
Ha egy olyan applikáció, ami lokálisan fut, böngészőn kívül, akkor egyszerűbb esetben azt tenném, hogy kapna egy egyedi, admin jogokkal felruházott usert az adatbázisban, azzal a userrel lép be a desktop alkalmazásba, az applikáció indításakor rákapcsolódik az adatbázisra és csak akkor dobja a kapcsolatot, amikor kilép a programból.
Bonyolultabb esetben jobb ötletnek tartanám, ha többrétegű alkalmazást készítenél: a web szerveren futna egy köztes alkalmazás, saját authentikációs rendszerrel, vele kommunikálna a desktop úgy, hogy közvetlenül az adatbázishoz csak a szerveren futó program férhet hozzá. Biztonsági okokból ez utóbbi talán jobb megoldás.
Elnézést, kicsit pontatlanul fogalmaztam meg a témát,
Szóval legyen egy webshop és annak az adminisztrátora, aki a webes felületen belépve szerkeszteni tudja a kategóriákat, termékeket, stb.
Ugyanerre a feladatra szeretnék egy lokálisan, böngészőn kívül futó, pl adobe air, vagy java-s klienset, amivel a shop adminisztrátora ugyanúgy elérheti/szerkesztheti a webes adatbázist, mint a webes felületről.
A dolog működési elve érdekelne az adnminisztrátor azonosítása szempontjából.
Vagy egy másik példa, az adminisztrátor kint van a "terepen", ahol nincs net és lokálisan, a laptopján gyűjti az infót, amit aztán este szinkronizál a webes adatbázissal.
Akkor (_szerintem_: amíg
De kíváncsi vagyok, mások mit szólnak hozzá... (akár ahhoz, amit írtam, akár a kérdésedhez)
ugyanúgy
A felvázolt feladatra egyébként nem feltétlenül kell kliens alkalmazás, webkapcsolat hiánya esetén lehet tárolni az adatokat pl. a localstorage-ben, aztán ha van kapcsolat, felszinkronizálna (akár automatikusan).
A felhasználó egyszer bejelentkezik (pl el kell küldeni a username/jelszó párost), kap egy munkamenet azonosítót, az adatok küldözgetését azzal lehet párosítani. Ha a munkamenet azonosító lejár, akkor újra be kell jelentkezni. A lejárat függhet az azonosító öregségétől, és/vagy a felhasználó inaktív időtartamától.
Ha mégis desktop kliens alkalmazást csinálnál, talán célszerű úgy megcsinálni, hogy lényegében pont ugyanolyan legyen az adatforgalom, mint egyébként egy böngészős elérésnél, vagyis a szerver oldalon nem kell kétszer dolgozni.
A localstorage jó ötlet,
A hozzászólásokból összerakva, működőképes lehet egy olyan dolog, ami az alkalmazás indításkor bekéri a webes felhasználónév/jelszó párost, ami egyben a lokális azonosításra is szolgálna, majd ezekkel bejelentkezik a webes alkalmazásba? Innen visszakap egy session id-t, amit a továbbiakban minden webes kéréshez hozzácsatol és ez szolgál azonosítóként, amíg a felhasználó nem zárja be a kliens alkalmazást, vagy adott idejű inaktivitás után automatikusan törlődik a session id.
Biztonsági szempontból mennyire aggályos a felhasználói azonosítót a kérésekkel együtt utaztatni? Gondolom a biztonságos kapcsolat az alap ilyenkor.
nem javaslom
1. Helyileg el kell tárolnod az összes felhasználónév jelszó párost, ez pedig visszafejthető. (ilyen esetben a hash sem segít)
2. Mi van, ha nem az adott kliensről jelentkezik be, megváltoztatja a jelszót, majd a kliensen web nélkül akar dolgozni?
Én inkább úgy csinálnám, hogy ha nincs webkapcsolat, akkor azonosítatlan felhasználóként rögzítenének adatokat (esetleg az oprendszer felhasználójához kötném a lehetőségeket) majd amikor webkapcsolat jön létre, szinkronizálni akar, akkor bekérném a felhasználónevet/jelszót és indítanám a sessiont. (ekkor akár lehetne párosítani az oprendszer felhasználójával a webes felhasználót, hogy offline esetben is ezzel azonosíthassa magát helyileg)
Az alkalmazást csak akkor lehetne elkezdeni használni (installálni), ha van webkapcsolat (ekkor megtörténik az azonosítás). Helyileg eltárolódna, hogy ki dolgozik (a jelszó nem) (ha browser alapú a dolog, akkor pl. a localstorage-ban, ha desktop kliens, akkor egy fájlban), de mindig, ha megjön a webkapcsolat és nincs érvényes session, akkor újra kell azonosíttatni a felhasználót.
SSL