Google/Facebook Oauth2 pri architekture SPA + mikrosluzby

Ahojte, viete mi prosim povedat aky je spravny postup authentifikacie a authorizacie pri uvedenej architekture?

Co potrebujem:
- Ziskat po prihlaseni cez google / fb token, ktorym sa budem dopytavat na API
- Vediet token overit, resp. ziskat novy token refresh tokenom
- Ak sa prihlasi novy uzivatel, chcem mu zalozit konto aby som ziskat interne ID, ktore sa nasledne bude pouzivat pri roznych operaciach

Konkretny tech stack bude VueJS a Spring Boot.

Vzhladom na to, ze chcem pouzivatelovi vytvarat konto, rozmyslam ze by som to authentifikaciu robil cez Spring, nacital si profil pouzivatela, a z neho vytvoril svojpomocne JWT, dal by som mu vlastnu expiraciu, vlastny private key, vedel cez public key overovat platnost tokenu pouziteho pri konzumacii API, atd.

Pozeral som google dev. konzolu, aj nejake tutorialy, a ten access token a refresh token by malo ist ziskat aj priamo v JS klientovi, a refreshovat token priamo oproti google api. Lenze v tomto pripade neviem co bude s mojim planom zalozit pouzivatelovi profil.

S Oauth2 zacinam, tak sa ospravedlnujem ak otazka vyznela hlupo. Viete poradit ako to riesit? Dik.


Re:Google/Facebook Oauth2 pri architekture SPA + mikrosluzby
« Odpověď #1 kdy: 10. 04. 2021, 18:35:27 »
Nevymýšlel bych nic nového, vaše požadavky jsou úplně standardní, takže stačí postupovat podle základního tutorialu: Spring Boot and OAuth2.

cjohn

Re:Google/Facebook Oauth2 pri architekture SPA + mikrosluzby
« Odpověď #2 kdy: 11. 04. 2021, 09:34:45 »
Nevymyslal by som nic noveho, ale pouzil by som Open ID Connect (OIDC) - to vlastne autentifikacia, ktoru poskytuje Google, Facebook,...  OIDC != OAuth, OIDC je rozsirenie postavene nad OAuth (ale vacsina ludi si to aj tak zamiena).

SPA potrebuje Authorization Code Flow with PKCE (zabudni na stary implicit flow, silent refresh v iframe a pod).
Backend iba verifikuje/authorizuje token, ziaden redirect na login, ale max vrati 401/403 a SPA frontend si tento chybovy stav musi poriesit.

Re:Google/Facebook Oauth2 pri architekture SPA + mikrosluzby
« Odpověď #3 kdy: 11. 04. 2021, 09:56:55 »
Nevymyslal by som nic noveho, ale pouzil by som Open ID Connect (OIDC) - to vlastne autentifikacia, ktoru poskytuje Google, Facebook,...  OIDC != OAuth, OIDC je rozsirenie postavene nad OAuth (ale vacsina ludi si to aj tak zamiena).

SPA potrebuje Authorization Code Flow with PKCE (zabudni na stary implicit flow, silent refresh v iframe a pod).
Backend iba verifikuje/authorizuje token, ziaden redirect na login, ale max vrati 401/403 a SPA frontend si tento chybovy stav musi poriesit.
A nebo jste si taky mohl ten odkaz rozkliknout…

luvar

  • ***
  • 201
    • Zobrazit profil
    • E-mail
Re:Google/Facebook Oauth2 pri architekture SPA + mikrosluzby
« Odpověď #4 kdy: 11. 04. 2021, 12:26:10 »
Za mna su minimalne dve cesty. Bud pochopit OAuth a bezpecnost (a clovek sa moze rovno profilovat na experta), alebo pre aku/taku implementaciu stravit cca 2 az 4 mesiace studiom a implementaciou za pouzitia springu. Vyledkom bude tak cca 300 LOC kodu a kus konfiguracie.

Ja som siel druhou cestou a sice nechapem princimom dostatocne, ale vo vysledku to funguje, lietaju mi jwt tokeny po prihlaseni a aj github a aj google login (vratane vlastneho loginu ako tretej moznosti) funguju.

Moja cesta:
precitat vsetky tri casti turotialu (zaujimava pre backend je druha):
https://www.callicoder.com/spring-boot-security-oauth2-social-login-part-1/
git clone https://github.com/callicoder/spring-boot-react-oauth2-social-login-demo.git
zacat sa hrat a po jednom subore/fnkcionalite preklapat veci do vlastneho projektu.
Pomedzi zufalost s novymi a novymi otazkami, prejst aspon jedno video typu "deep dive":
https://youtu.be/AdsnM6OTepc

Vysledkom u mna bolo, ze ked chcem pouzit novy hash, ci sposob saltovania, na ukladanie hesla (lokalne uzivatelske konto), tak viem, ze nic nie je potrebne kodit a spring to riesi pri spravnej konfiguracii za mna a dokonca tam je aj ten kus kodu, ze ked sa prihlasi user a jeho zahashovane/zasaltovane heslo je ulozene v "slabom" formate, tak sa preklopi do novsej verzie podla konfigu. K tomu nie je potrebne pisat ani riadok kodu. Na kopec takychto detailov som prichadzal postupne dost dlhu dobu (aspon podla mna dlhu). Mozno ma zmysel nejaky kurz venovany tejto oblasti.


Re:Google/Facebook Oauth2 pri architekture SPA + mikrosluzby
« Odpověď #5 kdy: 11. 04. 2021, 17:28:46 »
Odporúčam tiež pozrieť:
https://developers.google.com/identity/protocols/oauth2
https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent

OAuth2 je pre autorizáciu aplikácií a nie ľudí. OpenID Connect je nadstavba, ktorá poskytuje údaje o ľudskom užívateľovi. OpenID je pôvodná implementácia pre autentifikáciu, ale tá sa neujala.

Napísal som aj dlhú odpoveď, kde som vysvetľoval ako funguje celý mechanizmus, ale root fórum napísala partia brigádnikov, tak ma to odhlásilo a nevedel som sa vrátiť k rozpísanému príspevku.


Re:Google/Facebook Oauth2 pri architekture SPA + mikrosluzby
« Odpověď #6 kdy: 11. 04. 2021, 21:03:48 »
Dakujem za aktualne odpovede. Este som googlil a objavil som toto

https://www.javachinna.com/spring-boot-angular-10-user-registration-oauth2-social-login-part-1/

 v uvedenom sekvencnom diagrame je vidiet ze je to navrhnute podobne, ako som to navrhoval v otazke (prva varianta), to podla vas ok?


Re:Google/Facebook Oauth2 pri architekture SPA + mikrosluzby
« Odpověď #7 kdy: 11. 04. 2021, 21:31:07 »
Jak jsem psal, nevymýšlel bych kolo. Nejprve bych to implementoval podle toho tutoriálu Springu, a až vám to bude fungovat a budete rozumět tomu, jak to funguje, můžete to upravovat. Když to budete vymýšlet sám, nevíte, jestli tam někde nemáte díru. U té implementace ve Springu se dá přeci jen předpokládat s větší pravděpodobností, že to je správně.

Re:Google/Facebook Oauth2 pri architekture SPA + mikrosluzby
« Odpověď #8 kdy: 12. 04. 2021, 00:42:00 »
Jak jsem psal, nevymýšlel bych kolo. Nejprve bych to implementoval podle toho tutoriálu Springu, a až vám to bude fungovat a budete rozumět tomu, jak to funguje, můžete to upravovat. Když to budete vymýšlet sám, nevíte, jestli tam někde nemáte díru. U té implementace ve Springu se dá přeci jen předpokládat s větší pravděpodobností, že to je správně.

Nedari sa mi zial najst oficialnejsi zdroj pri pouziti social oauthu so SPA. Vacsina prikladov vratane toho na blogu je, prihlasovanie na server side appke, po prihlaseni na google stranke, opat prebehne redirect na serverovu appku kde sa stane ta springova magia. Ak ale vyvijam SPA klienta, tak ten oauth prebehne predpokladam tam, otazka teda je, ako komunikovat so springom v tomto pripade, co mu poslat atd.

Re:Google/Facebook Oauth2 pri architekture SPA + mikrosluzby
« Odpověď #9 kdy: 12. 04. 2021, 10:27:43 »
Nedari sa mi zial najst oficialnejsi zdroj pri pouziti social oauthu so SPA. Vacsina prikladov vratane toho na blogu je, prihlasovanie na server side appke, po prihlaseni na google stranke, opat prebehne redirect na serverovu appku kde sa stane ta springova magia. Ak ale vyvijam SPA klienta, tak ten oauth prebehne predpokladam tam, otazka teda je, ako komunikovat so springom v tomto pripade, co mu poslat atd.

Použití Spring Security spolu s SPA je popsáno v dalším tutorialu: Spring Security and Angular, ale už je to komplikovanější. Token musíte na straně serveru (Springu) ověřovat vždy. Jediný rozdíl je v tom, jestli authorization token vyměňujete za access token v prohlížeči nebo na serveru, což je jen implementační detail.