Nejlepší strategie autorizace závisí na rozsahu vašich aplikací v krátkodobém nebo dlouhodobém horizontu.
Monolitický nebo jednoduchý web se soukromým přihlášením
Například, pokud budete mít pouze jednoduchý (MERN) web s jedním jednoduchým backendem (api rest) nebo monolitickou aplikaci, jako je tato příklad Mern s interním nebo soukromým přihlášením ve vaší organizaci může být vaše autorizační strategie tak jednoduchá jako:
- (1*) /login expresní cesta, která přijme uživatele/heslo, ověří je v databázi a vrátí klasický token jwt a řadu možností (trasy reakce), ke kterým by měl mít uživatel přístup
- webová aplikace (reagovat) musí vykreslit stránky, jejichž trasy se shodují s přijatými trasami
- webová aplikace musí odeslat přijatý token do jakéhokoli vyvolání koncového bodu rozhraní API
- Když rozhraní API obdrží vyvolání z webu Reagovat, musí ověřit existenci tokenu jako hlavičky. Pokud neexistuje, musí vrátit chybu 403.
- (2*) Pokud token existuje, musí se pokusit jej ověřit (dobře vytvořený, nevypršela platnost, správný podpis atd.).
- (3*)Pokud se jedná o platný token, musíte provést poslední ověření:Je uživateli s rolí „host“ povoleno provést příkaz
DELETE
do koncového bodu/user/100
. - (4*) Klasickým řešením je mít v databázi nějaké tabulky jako:user, role, user_roles, role_permission, permit_option. Tabulka možností musí registrovat všechny vaše koncové body API a její metodu. Také to může být použito k vytvoření vztahu mezi uživatelskými <:> webovými trasami. Zkontrolujte toto
Moderní požadavky
Moderní a velké organizace vyžadují:
- Přihlášení k sociální síti
- Interní/externí uživatelé
- Není interaktivní přihlášení (roboty, plánovače atd.)
- Několik webových aplikací
- Několik mobilních aplikací
- Hodně Api Rest
V tomto případě není aplikace MERN dobrou volbou, protože je ALL-IN-ONE. Běžnou strategií pro implementaci předchozích požadavků je mít několik artefaktů nasazených na několika serverech:
- webová aplikace (react, vue, angular, linkstart atd.)
- apis rest (nodejs + expres, java, python atd.)
- ověření/autorizace:platforma/poskytovatel oauth2, platformy identity/přístupu atd
Pokud je to váš případ, musíte svou aplikaci MERN rozdělit na několik implementovatelných artefaktů:web, rozhraní API a zabezpečení.
Oauth2
Bez ohledu na to, zda se zajímáte pouze o přihlášení nebo o to, jak zajistit autentizaci a autorizaci pro vaše weby, API a možná vaše mobilní aplikace, budete potřebovat:OAUTH2
Můžete si vyvinout vlastní bezpečnostní platformu s ohledem na (1*), (2*), (3*) y (4*) nebo použít něco jako:
- auth0
- klíčenka atd
Další podrobnosti zde:https://stackoverflow.com/a/62049409
Vaše otázky
- která metoda je podle vás lepší?
- Myslím, že pokud použijete auth0, ušetříte čas a úsilí. S auth0 potřebujete jednoduchou expresní aplikaci s některými koncovými body jako /login, /callback atd. Nebo pokud používáte auth0 + passport.js, tyto koncové body jsou spravovány passport.js
- Radím vám, před použitím auth0 s pasem/bez pasu si projděte, jak funguje tok OAUTH2. Tento odkaz hodně mi pomohl.
- Jaký je rozdíl mezi 2 a 3,
- Jak jsem četl, auth0 a další platformy nabízejí službu správy uživatelů nebo se mohou připojit ke službě vašich uživatelů (AD/LDAP, databáze, rozhraní API atd.). Takže
- Existuje způsob, jak implementovat pravidla do služby Passport (např. přesměrovat nové uživatele při prvním přihlášení)
- Ano. Můžete přidat určitou logiku, když je zpětné volání přesměrováno ve vašem nodejs s pasem nebo bez něj.
- Pokud implementuji Passport s MongoDB a moje databáze má stovky uživatelů, jak je mohu spravovat?
- V současné době databáze podporuje mnoho řádků. Zkuste ji tedy pro vaši produkční databázi optimalizovat nebo monitorovat. Další možností je najmout správce databáze, aby tyto úkoly provedl.
Odkazy
- https://www.digitalocean.com/ community/tutorials/an-introduction-to-oauth-2
- https://auth0.com/user-management
- https://stackoverflow.com/a/62049409
- https://fiware-tutorials.readthedocs. io/en/latest/roles-permissions/index.html
- https://dba. stackexchange.com/questions/36935/best-relational-database-structure-for-this-data
- https://www.mind -it.info/2010/01/09/nist-rbac-data-model/
- Správa jednotného přihlášení pomocí passportjs pro mé vlastní webové aplikace – sdílení přihlašovacích údajů
- https://aws.amazon.com/blogs/apn/how-to-integrate-rest-apis-with-single-page-apps-and-secure-them -using-auth0-part-1/
- Asynchronní informace Django, Ajax, Jquery
- relační modely