sql >> Databáze >  >> NoSQL >> MongoDB

Jaký je nejlepší způsob ověření a autorizace webového řešení a řešení API, jako je MERN Stack?

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




  1. Databáze přes 2 GB v MongoDB

  2. Nelze se připojit k serveru 127.0.0.1:27017

  3. Jak sdílet relaci mezi NodeJs a PHP pomocí Redis?

  4. Dotaz na získání dat za posledních X minut pomocí Mongodb