OAuthGyorstalpaló
A iWiW Fejlesztői Wiki wikiből
Terminológia
- Service Provider
- A szolgáltató aki lehetővé teszi felhasználóinak, hogy a nála tárolt adataikat harmadik féllel megosszák, esetünkben maga az iWiW.
- Consumer
- Az a harmadik fél (amely lehet egy weboldal, desktop vagy mobil alkalmazás, illetve bármilyen internethez kapcsolódó eszköz), aki megszerezve a felhasználó jóváhagyását, hozzáfér annak adataihoz.
- Felhasználó
- Az iWiW-en regisztrált felhasználó.
- Tokenek
- Lényegi része az OAuth protokollnak, hogy a felhasználó jelszavát a harmadik fél soha nem kapja meg, hanem a hozzáféréshez tokeneket használ. Ezeknek a tokeneknek az a sajátossága, hogy a felhasználó ellenőrizheti, kiknek adott jogosultságot adataihoz, és a tokenek visszavonásával meg is szüntetheti a hozzáférést (anélkül, hogy a jelszavát meg kellene változtatnia).
- Kulcsok (consumer key, consumer secret, publikus RSA kulcs)
- A Consumer azonosítása és az adatforgalom hitelesítése a kulcsokkal történik. A kulcsok a Fejlesztői portálon menedzselhetőek, enélkül nem lehetséges az autentikáció (és következésképp semelyik iWiW REST API használata sem).
3 lábas OAuth autentikáció
Ez a "klasszikus" értelemben vett OAuth autentikáció. A Consumer a kövezkező lépéseket kell, hogy tegye ahhoz, hogy hozzáférhessen az iWiW Connect API-hoz:
- Consumer a háttérben meghívja az iWiW requestToken szolgáltatásást, és a szerez egy request tokent: ez még nem használható fel semmilyen felhasználói adathoz való hozzáférésre
- Consumer átirányítja a felhasználót az iWiW "hozzáférés jováhagyása" oldalára (authorize) a request tokennel
- Ha a felhasználó engedélyezi a Consumernek, hogy hozzáférjen az iWiW-en tárolt adataihoz, az iWiW "aláírja" a request tokent, és visszairányít a Consumerhez
- Consumer a háttérben meghívja az iWiW accessToken szolgáltatást, ahol az aláírt request tokenért "cserébe" kap egy access tokent
- Consumer az access token birtokában a felhasználó nevében meghívja az iWiW Connect API valamely REST szolgáltatását
Fontos megjegyezni az alábbiakat:
- semelyik fenti művelet nem végezhető el az iWiW devportálon regisztált OAuth kulcsok nélkül
- a tokenek nem használhetóak fel a kulcsok nélkül
- a felhasználó jóváhagyása csak request token birtokában kérhető
- access tokenhez csak a felhasználó jóváhagyásával lehet hozzájutni
- semmilyen API hívás nem végezhető a felhasználó nevében, illetve nem lehet hozzáférni a felhasználó adataihoz access token nélkül
- a felhasználó bármikor érvénytelenítheti access tokent
- az access tokenek hosszú lejáratúak (jelenleg 1 év), ezért célszerű azokat a Consumernek tárolnia, ezzel elkerülhető, hogy a felhasználó jóváhagyását újra és újra kelljen kérnie
- az összes HTTP kérés és válasz validált, azaz
- ellenőrizhető, hogy valóban a Consumer illetve a Service Provider (iWiW) hozta létre
- ellenőrizhető, hogy nem változtatta meg senki (azaz védett az ún. "man in the middle" támadásoktól, request/response hamisításoktól)
- a kommunikáció (jelenleg) nem titkosított csatornán folyik, ennek következtében elvileg az "lehallgatható", a belépéshez szükséges adatokhoz azonban nem lehet hozzáférni (azaz ha hozzá is jut valaki a kommunikáció egy részéhez, annak birtokában több adathoz nem tud hozzájutni)
- A fentiek értelmében nagyon fontos, hogy a consumer secret (illetve adott esetben a privát RSA kulcs) ne kerüljön illetéktelen személyek kezébe. Erről a Consumernek felelőssége gondoskodni.
2 lábas OAuth autentikáció (avagy Signed Fetch)
Abban az esetben, ha a felhasználó és a harmadik fél között fennáll már valamilyen viszony, és a harmadik félnek van valamilyen információja a felhasználóról, 2 lábas (2 legged) OAuthról van szó. Klasszikus értelemben véve ez nem is OAuth autentikáció, csak az OAuth infrastruktúrával aláírt HTTP kommunikáció.
Az iWiW esetében ez az jelenti, hogy egy felhasználó az iWiW-en azáltal, hogy fölvett egy kisalkalmazást (OpenSocial gadgetet), engedélyezte, hogy a felhasználó böngészőjében futó gadget és annak backend szervere hozzáférjen a nevében az iWiW Social API-hoz. A gadget felől a backendhez érkezett kéréssel hozzájutott a felhasználó azonosítójához.
A gedget backendje ebben az esetben az OAuth kulcsaival hitelesített HTTP requestekkel éri el az iWiW Social API-t, minden kérésben explicit megadva, hogy melyik felhasználó nevében történjen (xoauth_requestor_id paraméter).
Fontos tudni:
- A backend csak olyan felhasználó nevében férhet hozzá a Social API-hoz, akinek tepeítve van az iWiW-en az adott alkalmazás. Ha a felhasználó törli az alkalmazást, a hozzáférés automatikusan megszűnik.
- A 3 lábas OAuth-hoz hasonlóan a HTTP kommunikáció itt is validált.
- A 2 lábas OAuth kizárólag gadgetek backendje számára elérhető.
- A backend azonosítása itt is OAuth kulcsok alapján történik, ezért nagy figyelmet kell fordítani arra, hogy a consumer secret illetve a privát RSA kulcs titokban maradjon.
