Suojaa API-resurssisi koneiden väliselle viestinnälle
Opi hyödyntämään OAuth 2.0 ja JWT suojaamaan API-resurssisi koneiden väliselle viestinnälle.
Opi hyödyntämään OAuth 2.0 ja JWT suojaamaan API-resurssisi koneiden väliselle viestinnälle.
Kun rakennetaan projektia, joka sisältää useita palveluita, API-resurssien turvallisuus on kriittinen asia. Tässä artikkelissa näytän, kuinka voit hyödyntää OAuth 2.0 ja JWT suojaamaan viestintää palveluiden (koneiden välinen) välillä, ja kuinka soveltaa roolipohjaista pääsynhallintaa (RBAC) noudattaaksesi vähimmäisoikeusperiaatetta.
Jotta voit seurata mukana, oletan, että sinulla on seuraavat edellytykset:
Esimerkkinä oletetaan, että meillä on seuraavat palvelut:
https://cart.example.com/apihttps://payment.example.com/apiNyt meidän ostoskoripalvelumme täytyy soittaa maksupalveluun käsitelläkseen maksuja. Autentikointivirta on seuraava:
Joihinkin keskeisiin käsitteisiin yllä olevassa kaaviossa kuuluu:
Jokaisella osallistujalla yllä olevassa kaaviossa on rooli autentikointivirrassa:
Käydään läpi autentikointivirta askel askeleelta.
Autentikointivirran suorittamiseksi meidän täytyy luoda koneiden välinen sovellus (ostoskoripalvelu) ja API-resurssi (maksupalvelu) Logtossa.
Koska meidän ostoskoripalvelumme täytyy olla tietoinen maksupalvelun API:sta suorittaessaan autentikointia, meidän täytyy luoda API-resurssi ensin. Mene Logto-konsoliin, napsauta API-resurssit vasemmanpuoleisessa sivupalkissa ja napsauta Luo API-resurssi. Avautuneessa ikkunassa tarjoamme joitain opetusohjelmia auttamaan sinua pääsemään alkuun. Voit myös napsauttaa Jatka ilman opetusohjelmaa ohittaaksesi sen.
Syötä API:n nimi ja tunniste, esimerkiksi, Maksupalvelu ja https://payment.example.com/api, ja napsauta sitten Luo API-resurssi.
API-resurssin luomisen jälkeen sinut ohjataan yksityiskohtaiselle sivulle. Voimme jättää sen tällä hetkellä sellaiseksi kuin se on.
Napsauta Sovellukset vasemmanpuoleisessa sivupalkissa ja napsauta Luo sovellus. Avautuneessa ikkunassa löydä Koneiden välinen kortti, ja napsauta sitten Aloita rakentaminen.
Syötä sovelluksen nimi, esimerkiksi, Ostoskoripalvelu, ja napsauta Luo sovellus. Sinulle näytetään vuorovaikutteinen opas auttamaan sinua sovelluksen asennuksessa. Voit noudattaa opasta ymmärtääksesi peruskäytön tai napsauttaa Valmis ja valmis ohittaaksesi sen.
Koska koneiden välisten sovellusten oletetaan olevan turvallisia (esim., ne sijoitetaan yksityiseen verkkoon), voimme käyttää OAuth 2.0 "client_credentials"-valtuutusta saadaksemme pääsytunnuksen. Se käyttää perusautentikointia asiakkaan tunnistamiseen:
POST.Content-Type -otsikko on application/x-www-form-urlencoded.Authorization-otsikkoa varten arvo on Basic <base64(app_id:app_secret)>, missä app_id ja app_secret ovat koneiden välisen sovelluksen sovellustunnus ja sovellussalaisuus. Voit löytää ne sovelluksen yksityiskohtaiselta sivulta.grant_type=client_credentials&resource=https://payment.example.com/api.
grant_type=client_credentials: Vakioarvo "client_credentials" myönnölle.resource=https://payment.example.com/api: API-resurssin API-tunniste, johon asiakas haluaa päästä.scope=read:payment write:payment. Käsitellään laajuuksia myöhemmin.Tässä on esimerkki pyynnöstä curl:lla:
Onnistunut vastausrunkorakenne voisi olla seuraava:
Nyt meillä on pääsytunnus, ja voimme lisätä sen API-resurssin pyynnön Authorization-pääotsikkoon. Esimerkiksi, jos haluamme kutsua maksupalvelun POST /payments API:a, voimme lähettää seuraavan pyynnön:
Saatat huomata, että maksupalvelun täytyy vahvistaa JWT JWK-joukon avulla, ja sillä saattaa olla paikallinen JWK-joukon välimuisti välttääkseen JWK-joukon saamista Logtosta jokaisella kerralla. Onneksi JWT:n suosion vuoksi on olemassa monia kirjastoja, jotka voivat auttaa sinua saavuttamaan tämän muutamilla koodiriveillä.
Näitä kirjastoja kutsutaan yleensä "jose" (JavaScript Object Signing and Encryption) tai "jsonwebtoken". Esimerkiksi Node.js:ssä voimme käyttää jose vahvistamaan JWT:
Jos vahvistus onnistuu, payload-muuttuja on dekoodattu JWT-taulu. Muussa tapauksessa tapahtuu virhe.
Nyt olemme onnistuneesti suojanneet viestinnän ostoskoripalvelun ja maksupalvelun välillä. Kuitenkin autentikointivirta vain varmistaa, että asiakas on todellinen ostoskoripalvelu, mutta ei varmistaa, että ostoskoripalvelulla on lupa suorittaa toimintoja maksupalvelussa.
Sanotaan, että haluamme sallia ostoskoripalvelun luoda maksuja, mutta ei lukea maksuja.
Logtossa "laajuuksia" ja "oikeuksia" käytetään keskenään vaihdettavasti. Mene maksupalvelun API-resurssin tiedot -sivulle ja siirry Luvat-välilehdelle. Sen pitäisi olla nyt tyhjä. Napsauta Luo lupa, syötä read:payment oikeusnimeksi ja syötä Lue maksut luvan kuvaukseksi. Napsauta sitten Luo lupa.
Toista yllä olevat vaiheet toisen luvan luomiseksi nimellä write:payment ja kuvauksella Luo maksuja.
Rooli on ryhmä oikeuksia. Logtossa koneiden välisille sovelluksille voidaan antaa rooleja myöntääkseen oikeuksia. Napsauta "Roolit" vasemmanpuoleisessa sivupalkissa ja napsauta Luo rooli.
checkout roolin nimeksi ja syötä Checkout-palvelu roolin kuvaukseksi.write:payment oikeus.


Sen lisäksi mitä mainitsimme Pyydä pääsytunnus -kohdassa mainituista pyynnön rungon parametreista, voimme myös määrittää laajuudet pyynnön rungossa. Esimerkiksi, jos haluamme pyytää write:payment oikeuden, voimme lähettää seuraavan pyynnön:
Pyytääkseen useita laajuuksia, voit erottaa ne välilyönnillä. Esimerkiksi, scope=write:payment read:payment.
Jos toiminto tarvitsee write:payment oikeuden maksupalvelussa, voimme vahvistaa laajuudet varmistamalla, että JWT-sisutuksen scope-väittämä sisältää:
Jos haluat suojata pääsyä ostoskoripalveluun, voit myös soveltaa samaa autentikointivirtaa. Tällä kertaa ostoskoripalvelu on API-resurssi, ja asiakas on toinen palvelu, joka tarvitsee päästä siihen.
Logton avulla API-resurssisi ovat suojattu OAuth 2.0:lla ja JWT:llä, ja voit noudattaa vähimmäisoikeusperiaatetta soveltamalla roolipohjaista pääsynhallintaa. Lisäksi voit käyttää Logtoa hallinnoimaan käyttäjiäsi ja heidän lupiaan, ja jopa integroitumaan kolmannen osapuolen identiteetin tarjoajien kanssa.