OAuth hogyan?
Sziasztok!
Érdekelne, hogy van e valakinek tapasztalata OAuth-al, esetleg az elvével tisztában van e? Valahogy képtelen vagyok felfogni, hogy miért biztonságosabb, mint egy sima session cookie-s munkamenet...
■ Érdekelne, hogy van e valakinek tapasztalata OAuth-al, esetleg az elvével tisztában van e? Valahogy képtelen vagyok felfogni, hogy miért biztonságosabb, mint egy sima session cookie-s munkamenet...
Közben megvilágosodtam, hogy
-> minden egyes kliens kap egy api key-t, amihez tartozik egy secret key, ezzel fog hash-t generálni, nevezhetjük nyugodtan salt-nak is
-> a kérésből a secret key segítségével létrehoz egy signature-t
-> a kéréssel együtt elküldi a signature-t és az api key-t
-> a szerver az api key alapján kikeresi a secret key-t, ő is létrehoz egy signature-t a kérés alapján, és összehasonlítja a kliens által küldöttel
-> ha stimmel a signature, akkor elfogadja a kérést, ha nem, akkor visszadobja
-> az api key-hez lehet esetleg jogokat hozzárendelni
Ha ez tényleg így megy, akkor lehet, hogy problémás, mert azt olvastam, hogy nem szabad ugyanazt a salt-ot többször felhasználni, minden hash-hez újat kell generálni, mondjuk azt nem írták le, hogy miért...
Az OAuth egy olyan protokoll,
Lényegében úgy működik, hogy:
Oké, így már világos.
Azonosítási módokat nézek, az a kínom, hogy nem tudom, hogy az authorizationt hogy érdemes megcsinálni egy REST service esetében. Mindenhol azt írják, hogy a session cookie elhelyezése nem jó, mert az alkalmazás állapotát REST esetében a kliensnek kell tárolni, nem a szervernek. Szóval a bejelentkezett állapotot is a kliensen kéne tárolni. Én ezzel nem teljesen értek egyet. Alapból ez a REST service is olyan, hogy bejelentkezés nélkül nem lehet használni benne semmit. Egyelőre teljes a káosz...
Idézet a wikipédiáról: A
Itt kiemeli hogy a szerver lehet állapottartó, mindössze egy kérésen belül az összes információnak rendelkezésre kell állnia a kiszolgáláshoz.
Nem szép megoldás, de a session key a get-ben elviekben kielégíti ezt a feltételt. Továbbá nyújt valami védelmet, hogy a Rest-et SSL-el szokták kombinálni.
Amúgy a megoldásod, attól függ mit szeretnél.
Én kezdetben csak egy sima API key-et adtam az admin felületen, amivel hozzá fértek az API-hoz. Egy ügyfélnek lehetett több is.
Később próbálkoztam API key + TOTP (Time based One Time Password) megoldásokkal és ott az OAUTH. Attól függ kinek szánod, zárt vagy nyílt kör, stb.
Nem szép megoldás, de a
Ez abszolút kivitelezhető (és elfogadott) szcenárió. Facebook API-t pl így lehet használni (egy
&access_token
fieldet oda kell csapni a kérés végére, más szolgáltatásoknál valamilyen HTTP fejlécet, igaziból mindegy)Nem teljesen értem mi a probléma azzal, hogy hol tároljuk az állapotot. A szerver oldali állapottárolás az lenne, hogy:
Kliens oldali állapottárolás:
Az OAuth az utóbbi forgatókönyvet valósítja meg.
Még mindig nem tudom
Ha jól értem az OAuth csak arra jó, hogy a felhasználó eldönthesse, hogy ad e hozzáférést a fiókjához külső alkalmazásoknak. Na az én esetemben ez a helyzet nem áll fenn, mivel mindegyik saját oldal. Szóval elméletileg az OAuth nem jó, gyakorlatilag meg mindenhol azt olvasom, hogy a REST service állapotmentes kell, hogy legyen, tehát nem lehet pl session cookie-t vagy munkamenetet használni, mert akkor a szerver fogja kezelni az állapotot és nem a kliens. Nekem egyáltalán nem állt össze a kép, hogy ezt az ellentétet hogy lehet feloldani OAuth-al, pedig stackoverflow-on mindenhol azt írják, hogy szignálni kell a kéréseket, úgy, mint ahogy az OAuth-al csinálják. Maximum azt tudom elképzelni, hogy minden kéréssel felhasználói nevet meg jelszót küldök, de ez meg biztonsági szempontból kalap szar. A vége szerintem az lesz, hogy a REST service-el csináltatok session id-t, hozzácsapom utána minden hozzá érkező kérésnél az url-hez, aztán ennyi. Fel nem tudom fogni, hogy nekem ez miért ne lenne jó...
szerk:
http://stackoverflow.com/a/466806/607033
Közben ez alapján összeállt, hogy szükségtelen az OAuth, ha nem akarok külső alkalmazásoknak jogot adatni a felhasználókkal (már pedig nem akarok). Meg hogy tökéletesen megfelel a queryString-hez vagy header-hez hozzácsapott session id. Még akár cookie-ban is lehetne, csak akkor kellene még egy token, hogy ne lehessen CSRF-el támadni. A queryString-es megoldás kevésbé kesselhető, de azt az adatokra amúgy sem akarok, mert pont hogy azok változnak, maga a kliens meg statikus. Max SQL-re lehetne kesselni...
Közben ez alapján összeállt,
Fentebb én is ezt írtam. :)
Amúgy nem tudom találkoztál-e vele, de nagyon jó kis olvasni való Rest témakörben.
Best Practices for Rest és egy másik kedvencem: RESTful Best Practices.
Az utóbbi sok baklövéstől megvédett.
Még nem, köszi, megnézem
Azt meg tudod mondani, miért
Persze, szeretek az ajánlások
Csak azért vetődött fel
Talán mert akkor nem írhatom
A szabványokat meg ajánlásokat nem véletlenül találják ki, ezek általában jól bevált dolgok, és érdemesebb ismerni őket, mint bármelyik egyedi rendszert.
Ez igaz, csak így önként
Hát én nem programozásban
Simán leírhatod, a REST
Egyébként némi joggal, az eredeti REST nagyon be van korlátozva, CRUD jellegű API-khoz nagyon jó, más jellegűekhez (pl. kereséscentrikus) legalábbis kényelmetlen.
Szerintem a REST egy nagyon
Például hogy miért nem jó neki a sütiben tárolt munkamenet-azonosító. A REST által használt session egy protokoll szintű fogalom, nem azonos egy webalkalmazás által használt alkalmazásszintű munkamenettel. Utóbbi ugyanúgy csak egy összetevője az alkalmazás állapotának, mint bármilyen tartalom, amit kezel, és nyilvánvalóan egy állapotmentes alkalmazás teljesen haszontalan.
A fentiek fényében a RESTful service a legtöbb esetben egy pontatlanul használt név azokra a szolgáltatásokra, amik HTTP-t használnak, és a szolgáltatás funkcionalitását a legszéleskörűbben a HTTP megfelelő funkcióin keresztül teszik elérhetővé.
Én is pont ezek miatt nem
:)
Kérdés, ha különböző emberek
rest fn USA: re'st UK: rest:
Azt írják a sütire, hogy
A session süti nem tartalmaz
Kik írják, hogy nem jó? A
Amíg nincs ssl, addig jobb a
A CSRF csak adatbázist
Meg put, patch, delete esetén
Az OAuth (2) autorizációs és
Ja, közben jobban