Suomi
  • express-js
  • javascript
  • opetusohjelma
  • tunnistus
  • autentikointi
  • jwt
  • identiteetti
  • api

Suojaa Express.js API JWT:llä ja Logtolla

Opi suojaamaan Express.js API-päätepisteesi JSON Web Tokeneilla (JWT) ja Logtolla.

Gao
Gao
Founder

Johdanto

Kun kehität web-sovellusta, on ratkaisevan tärkeää suojata API-päätepisteet luvattomalta pääsyltä. Kuvittele, että rakennat verkkokauppasivustoa; et todellakaan halua, että kybervarastajat hyödyntävät API-tasi.

Oletetaan, että olet jo rakentanut Express.js-sovelluksen käyttäjäautentikoinnilla, jossa käyttäjien on kirjauduttava sisään ennen tiettyjen toimien suorittamista. Jos ei, voit aloittaa matkasi Logtolla. Käyttäjäautentikointivirran luominen vaatii vain muutaman koodirivin.

Kuitenkin, jopa käyttäjäautentikoinnin jälkeen, kohtaat erilaisia vaihtoehtoja suojata API-päätepisteet. Valitettavasti useimmilla näistä vaihtoehdoista on haittapuolensa:

  • Istuntoon perustuva autentikointi: Sitoo API:n istuntotallennustilaan, mikä ei ole skaalautuva eikä sovi mikropalveluille hyvin.
  • Autentikointipalvelun kutsuminen: Tämä lisää ylimääräisen verkkohaun, mikä lisää viivettä ja kustannuksia. Jotkut autentikointipalvelut jopa veloittavat API-kutsumäärän perusteella, mikä voi johtaa suuriin kustannuksiin.

Tässä opetusohjelmassa osoitamme, kuinka vahvistat API-päätepisteitä JSON Web Tokenien (JWT) ja Logton avulla. Tämä lähestymistapa tarjoaa skaalautuvuutta ja minimaalista lisäkustannusta.

Etehtävät

Ennen sukeltamista varmista, että sinulla on seuraavat:

Määritä API-resurssisi Logtossa

Logto hyödyntää täysin RFC 8707: OAuth 2.0:n resurssi-indikaattoreita suojatakseen API-päätepisteesi. Tämä tarkoittaa, että voit määrittää API-resurssit käyttämällä niiden todellisia URL-osoitteita.

Siirry "API resources"-välilehdelle Logto Consolessa ja klikkaa "Create API resource" luodaksesi uuden. Esimerkiksi, jos haluat suojata /api/products-päätepisteen, voit käyttää URL-osoitetta https://yourdomain.com/api/products tunnisteena.

Luo API-resurssi

Hanki käyttöoikeustoken asiakassovelluksessasi

Jatkaaksemme, sinun täytyy integroida Logto SDK asiakassovellukseesi. Tämä sovellus saattaa erota Express.js-taustastasi; esimerkiksi sinulla saattaa olla React-sovellus, joka käyttää Express.js:n tausta-API-palvelinta.

Sinun on myös hienosäädettävä Logto SDK -konfiguraatio ilmoittaaksesi Logtolle, että haluat pyytää käyttöoikeustokeneita tähän käyttölupaan. Tässä on esimerkki käyttäen Reactia:

Kun käyttäjä kirjautuu sisään Logtolla, isAuthenticated Logto SDK:ssa muuttuu true:

Nyt voit käyttää getAccessToken-menetelmää hakeaksesi käyttöoikeustoken API:llesi:

Lopuksi, sisällytä tämä käyttöoikeustoken Authorization-otsikkoon tehdessäsi pyyntöjä API:llesi:

Varmista käyttöoikeustoken API:ssasi

Express.js-sovelluksessasi asenna jose-kirjasto JWT-varmennusta varten:

Koska käytämme Bearer-autentikointia, ota käyttöoikeustoken Authorization-otsikosta:

Seuraavaksi luo middleware varmentaaksesi käyttöoikeustokenin:

Voit nyt käyttää tätä middlewarea suojataksesi API-päätepisteesi:

Tällä lähestymistavalla sinun ei tarvitse ottaa yhteyttä Logto-palvelimeen aina, kun pyyntö saapuu. Sen sijaan haet JSON Web Key Setin (JWKS) Logto-palvelimelta kerran ja tarkistat käyttöoikeustokenit paikallisesti.

Roolipohjainen pääsynhallinta

Tähän mennessä olemme vain varmistaneet, että käyttäjä on kirjautunut sisään Logton avulla. Emme vieläkään tiedä, onko käyttäjällä sopiva oikeus käyttää API-päätepistettä. Tämä johtuu siitä, että Logto sallii kenen tahansa saada käyttöoikeustoken olemassa olevalle API-resurssille.

Voidaksemme käsitellä tämä, voimme käyttää roolipohjaista pääsynhallintaa (RBAC). Logtossa voit määritellä rooleja ja antaa heille oikeuksia. Tutustu tähän opetusohjelmaan oppiaksesi, miten määrittelet roolit ja oikeudet Logtossa.

Roolien ja oikeuksien määrittelyn jälkeen voit lisätä scopes-vaihtoehdon LogtoProvider-komponenttiin:

Logto myöntää sitten vain käyttöoikeustokenin sopivilla määritelmillä käyttäjälle. Esimerkiksi, jos käyttäjällä on vain read:products-oikeus, käyttöoikeustoken sisältää ainoastaan tämän oikeuden:

Jos käyttäjällä on sekä read:products että write:products-oikeudet, käyttöoikeustoken sisältää molemmat määritelmät välilyönnillä erottimena:

Express.js-sovelluksessasi voit varmistaa, että käyttöoikeustoken sisältää oikeat määritelmät ennen pääsyn myöntämistä API-päätepisteelle:

Yhteenveto

API-päätepisteiden suojaaminen samalla kun varmistetaan skaalautuvuus ei ole pieni tehtävä. Logtossa pyrimme yksinkertaistamaan pyyntötodentamisen kehittäjille, jolloin voit keskittyä enemmän liiketoimintalogiikkaasi.

Jos sinulla on kysymyksiä, liity Discord-palvelimellemme. Yhteisömme on aina valmis auttamaan sinua.