Suomi
  • hasura
  • restful api
  • graphql
  • logto
  • custom jwt
  • access control
  • authorization

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.

Darcy Ye
Darcy Ye
Developer

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.

Hasura API

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.

Hasura API scopeilla

Käyttäjän lukija rooli

Käyttäjän ylläpitäjä rooli

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).

Hasura JWT -konfiguraatio

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.

Käyttäjän pääsytokenin skripti

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ä contextin 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.

Käyttäjä rooleilla

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.