Tema
/
Mobiliosios programėlės KOTLIN
Pamoka 9 / 14 Autentifikacija II: Google ~45 min
📖 Teorija

Tas pats raktas, kitos durys

8a pamokoje sukūrėm sesijos rakto kontraktą: serveris išduoda vieną JWT, klientas jį saugo ir siunčia. Google prisijungimas nekuria naujo kontrakto — jis tik prideda dar vieną būdą gauti tą patį raktą.

Palygink du kelius:

El. paštas (8a):  el.paštas+slaptažodis ─▶ POST /login       ─▶ mūsų JWT
Google (8b):      Google ID raktas       ─▶ POST /auth/google ─▶ mūsų JWT   (tas pats!)

Nuo tos vietos programa nemato skirtumoSecureTokenStorage, AuthInterceptor, užsakymai (9 pamoka) veikia vienodai, nesvarbu, kaip prisijungei. Tai ir yra pamokos esmė: tas pats raktas, kitos durys.

Pilnas Google srautas:

1. Programa: Credential Manager parodo Google paskyrų pasirinkimą
2. Vartotojas pasirenka paskyrą → Google grąžina "ID token" (pasirašytą JWT)
3. Programa siunčia ID token → POST /auth/google
4. Serveris patikrina jį su Google (parašas, aud, exp) → idtoken.Validate
5. Serveris randa/sukuria vartotoją → išduoda MŪSŲ sesijos JWT
6. Programa saugo tą JWT — lygiai kaip 8a

Google ID token ≠ mūsų sesijos raktas. Google raktas tik įrodo „Google patvirtina, kad tai vartotojas X". Mes juo pasitikime tik po patikros serveryje, ir tada išduodam savo raktą. Klientas niekada tiesiogiai nesijungia į mūsų DB su Google raktu.

Konsolės paruošimas (Google Cloud Console). Prieš rašant kodą reikia dviejų OAuth klientų:

  • Android klientas — susietas su tavo programos paketo vardu (eif.viko.lt.pica) ir debug SHA-1 parašu. Jis leidžia telefonui iš viso gauti Google raktą.
  • Web klientas — jo ID naudoja IR programa (setServerClientId), IR serveris (kaip aud, kurį tikrina). Tai — dažniausio spąsto šaltinis, apie kurį kalbėsim.

Verify-docs. Naudojam Credential Manager (androidx.credentials + „Sign in with Google") — dabartinį API. Senasis GoogleSignInClient yra pasenęs (deprecated) — nerašyk prieš jį.