Logto x Hasura: Käytä JWT:tä pääsyn valvontaan
Tämä kattava opas esittelee vaiheet, jotka liittyvät Logton integroimiseen Hasuran JWT-muotoiseen pääsynvalvontaan, mikä tehostaa tietoturvaa.
Hasura on työkalu, joka voi nopeasti tarjota vastaavat GraphQL- ja REST-rajapinnat, jotka sopivat tietoihisi. Tietoturvaa silmällä pitäen Hasura tarjoaa myös mahdollisuuden hienosäätää pääsyn valvontaa kullekin eri rajapinnalle.
Yleensä Hasura-käyttäjät hyödyntävät muita identiteetinhallinta- ja todennuspalveluja, joista Logto on yksi suosituimmista.
Tässä blogikirjoituksessa oletamme, että käytät jo Hasuran palveluita. Esittelemme kuinka integroida Hasura ja Logto maksimoidaksemme tietojesi turvallisuuden. Jos sinulla ei ole Logto-tiliä, rekisteröidy ja ala käyttää sitä nyt!
Tausta
Hasura käyttää roolipohjaista pääsynhallintaa, kun taas Logto käyttää standardia roolipohjaista pääsynvalvontaa (RBAC).
Logton mallissa ja parhaissa käytännöissä RBAC:ille suosittelemme käyttäjiä käyttämään scope
:a vastaamaan luvan hienointa granulariteettia, käyttämään role
:a joukkona scopeja
käteviä erätoimintoja varten ja lopulta tarkistamaan scope
:n (yleensä resurssien tarjoajien puolelta) varmistaaksesi, voiko käyttäjä suorittaa tietyn toiminnon.
Hasurassa role
vastaa lupien hienointa granulariteettia, ja luvantarkistukset suoritetaan rooleja
vasten. Siksi Logton määrityksessä suosittelemme vastaamaan yksi role
yhteen scope
:en. Tämä lähestymistapa voi linkittää Logton ja Hasuran luvat yhteen välttääkseen sekaannuksia ja väärinkäytöksiä.
Hasura voi tukea pääsynvalvontaa Webhookeilla tai JWT:llä. Edellisessä blogikirjoituksessamme esiteltiin miten käyttää Webhookkeja ja seuraavissa osioissa selitämme kuinka käyttää Hasuran JWT-muotoista pääsynvalvontaa.
Aloita
Aloitetaan yksinkertaisella esimerkillä. Oletetaan, että käyttäjällä on jo kaksi rajapintaa Hasurassa, GET /user
ja PATCH /user
, jotka vastaavat kahta roolia: user:reader
ja user:maintainer
, vastaavasti.
1. Luo Hasura API -resurssi Lohtoon
Luo Hasura API -resurssi Logtoon.
2. Luo roolit Logton Hasura-asetusten mukaisesti
Meidän täytyy luoda kaksi scope
:a mainitulle Hasura API -resurssille vaiheessa 1, nimeltään read:user
ja maintain:user
, ja sitten luoda kaksi roolia: user:reader
(sisältäen read:user
scope) ja user:maintainer
(sisältäen maintain:user
scope) vastaamaan yksitellen Hasuran rooleja. Ja määritä nämä roolit Logto-käyttäjille tarvittaessa.
3. Konfiguroi Hasuran ympäristömuuttuja HASURA_GRAPHQL_JWT_SECRET
aktivoidaksesi JWT-moodin
Tarkastelemalla Hasura JWT -konfiguraatiovaihtoehtoja, meidän täytyy lisätä ja konfiguroida ympäristömuuttuja HASURA_GRAPHQL_JWT_SECRET
ennen kuin voimme käyttää JWT:tä pääsynvalvontaan.
On monia eri vaihtoehtoja, jotka voidaan konfiguroida, mutta esittelemme tässä yksinkertaisimman tapauksen: vain jwk_url
tarvitsee konfiguroida. Tämän arvon voi saada Logton OpenID-konfiguraatiopäätepisteestä (https://your.logto.domain/oidc/.well-known/openid-configuration).
4. Mukauta käyttäjän pääsytokenin lisävaatimuksia
Käyttäen Logton Custom JWT -ominaisuutta, mukauta logiikkaa lisätäksesi lisävaatimuksia JWT-muotoiseen käyttäjän pääsytokeniin.
Mukauta getCustomJwtClaims
-metodi lisätäksesi dataa JWT:hen, johon Hasura tukeutuu pääsynvalvonnan toteuttamisessa. Tämä voi sisältää dataa, joka liittyy käyttäjään, jota ollaan valtuuttamassa kyseisenä hetkenä, mukaan lukien roolit, jotka heillä on käytettävissä context
in kautta.
Olemme myös määritelleet ympäristömuuttujan USER_DEFAULT_ROLE_NAMES
välttääksemme kovakoodauksen.
5. Integroi Logto SDK
Kun olet konfiguroinut Logton ja Hasuran, integroi sovelluksesi Logto SDK:lla. Tässä käytämme Next-esimerkkiä esikatsellaksemme käyttäjän pääsytokenia, joka Logto myöntää kirjautumisen jälkeen.
Ensin määritämme aiemmin luodut user:reader
ja user:maintainer
roolit käyttäjälle ja kirjaudumme sitten sisään kyseisellä käyttäjällä.
Hanki käyttäjän pääsytoken ja pyydä Hasura API:ta:
Yhteenveto
Tässä artikkelissa esittelemme toisen JWT-muotoisen pääsynvalvontatavan, jota Hasura tukee, Webhookin lisäksi.
Vertaamalla Hasuran Webhook ja JWT pääsynvalvontaprosesseja voimme nähdä, että Webhook-lähestymistapa lähettää Webhookin Logtoon ja odottaa vastausta jokaisen Hasura-pyynnön kohdalla, kun taas JWT-muotoista lähestymistapaa voidaan käyttää jatkuvasti, kunnes JWT vanhenee.
JWT-lähestymistapa voi vähentää verkkokuormitusta ja poistaa Webhookien aiheuttaman verkkoviiveen; samalla Webhook-lähestymistapa voi synkronoida käyttäjän oikeuksien muutokset reaaliajassa.
Käyttäjät voivat valita sopivan lähestymistavan näiden päätelmien perusteella yhdistettynä todellisiin liiketoiminnallisiin tarpeisiinsa.