ugrás a tartalomhoz

Felhasználó azonosítás, desktop kliens - webes adatbázis

_lacus_ · 2012. Már. 25. (V), 10.34
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
 
1

A programból közvetlenül éred

Hidvégi Gábor · 2012. Már. 25. (V), 11.52
A programból közvetlenül éred el az adatbázisszervert? Mert akkor valószínűleg mindig küldeni kell az azonosítást, hacsak nem állandó (persistent) kapcsolatot használsz.
3

Ebben szerintem nincs igazad

H.Z. v2 · 2012. Már. 25. (V), 12.00
Több okból sem.
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)
4

persistent

Hidvégi Gábor · 2012. Már. 25. (V), 12.05
6

Tudom, mit jelent a szó, de

H.Z. v2 · 2012. Már. 25. (V), 12.26
Tudom, mit jelent a szó, de nem erről beszélek.
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.
2

desktop

H.Z. v2 · 2012. Már. 25. (V), 11.52
Mit értesz desktop alkalmazáson?
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.
5

Elnézést, kicsit pontatlanul fogalmaztam meg a témát,

_lacus_ · 2012. Már. 25. (V), 12.12
nem adatbázis felhasználóról van szó, hanem pontosabban webalkalmazás/webshop/weboldal adminisztrátorról.
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.
7

Akkor (_szerintem_: amíg

H.Z. v2 · 2012. Már. 25. (V), 12.55
Akkor (_szerintem_) : amíg nincs kapcsolat a szervereddel, addig gyakorlatilag nincs igazi authentikáció (pláne authorizáció), csak valami lokálisan tárolt adatok alapján (mittudomén, a program indításához szükséges user/jelszó, esetleg hardver kulcs/smartcard/stb), majd a szinkronizáláskor a valódi hitelesítési mechanizmus akár közvetlenül az adatbázis felé, akár egy alkalmazás szerveren keresztül (utóbbi a jobb megoldás - megintcsak szerintem)

De kíváncsi vagyok, mások mit szólnak hozzá... (akár ahhoz, amit írtam, akár a kérdésedhez)
8

ugyanúgy

zzrek · 2012. Már. 25. (V), 13.24
Úgyanúgy lehet megcsinálni, mintha webes kliens lenne.
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.
9

A localstorage jó ötlet,

_lacus_ · 2012. Már. 25. (V), 14.32
teljesen el is felejtettem, de itt most a lokális kliens és a webes alkalmazás közötti autentikált kapcsolat elve érdekelne.

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.
11

nem javaslom

zzrek · 2012. Már. 25. (V), 19.23
Nem javaslom, hogy lokális azonosításra is bekérd a felhasználónév/jelszó párost, több okból is:
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.
10

SSL

janoszen · 2012. Már. 25. (V), 17.37
Szerintem, Te SSL kliens certet szeretnél. Biztonságos, gyors, transzparens az alkalmazás felsőbb rétegei szempontjából és jól skálázódik, borzasztó könnyű saját CA-t üzemeltetni hozzá. Ja, és még programozni sem kell hozzá, mert a MySQL pl. tudja alapértelmezetten.