| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| informatique:api-rest:postgrest [2025/01/29 12:49] – [Création du jeton JSON Web Token (JWT)] bertrand | informatique:api-rest:postgrest [2025/10/13 12:25] (Version actuelle) – [Les droits] bertrand |
|---|
| </code> | </code> |
| |
| <note tip>Pour tester les requêtes on peut utiliser [[https://curl.se|curl]], et éventuellement faire un pipe sur //json query// (jq) pour que soit bien plus lisible le JSON retourné.\\ Il y a aussi l'utilitaire [[https://insomnia.rest/download|Insomnia]], et également Postman qui pousse plutôt la solution web, mais propose également un [[https://learning.postman.com/docs/getting-started/installation-and-updates/#installing-postman-on-linux|client lourd]], malheureusement, ni l'un ni l'autre ne sont libres ou Open Source !</note> | <note tip>Pour tester les requêtes on peut utiliser [[https://curl.se|curl]], et éventuellement faire un pipe sur //json query// (jq) pour que soit bien plus lisible le JSON retourné.\\ Il y a aussi l'utilitaire [[https://www.usebruno.com/|bruno]], [[https://insomnia.rest/download|Insomnia]], et également Postman qui pousse plutôt la solution web, mais propose également un [[https://learning.postman.com/docs/getting-started/installation-and-updates/#installing-postman-on-linux|client lourd]], la [[https://github.com/usebruno/bruno|version gratuite de Bruno]] est Open Source !</note> |
| ===== Utilisateur autorisé en écriture ===== | ===== Utilisateur autorisé en écriture ===== |
| |
| Plus d'informations sur les [[wpfr>JSON_Web_Token]]\\ | Plus d'informations sur les [[wpfr>JSON_Web_Token]]\\ |
| Le tutoriel de [[https://grafikart.fr/tutoriels/json-web-token-presentation-958|grafikart]]\\ | Le tutoriel de [[https://grafikart.fr/tutoriels/json-web-token-presentation-958|grafikart]]\\ |
| Rendez-vous sur [[https://jwt.io/#debugger-io|jwt.io]] puis suivez-les instructions comme sur le schéma:\\ | Tutoriel avec une petit code JS/Node pour créer un JWT : https://www.geeksforgeeks.org/json-web-token-jwt/\\ |
| {{https://postgrest.org/en/v7.0.0/_images/tut1-jwt-io.png}} | ou via un script sh : https://postgrest.org/en/stable/tutorials/tut1.html#step-3-sign-a-token |
| |
| À quelques adaptations près : | À quelques adaptations près : |
| [[:informatique:api-rest:postgrest-dockeriser|dockeriser postgresql/postgis/postgrest]] | [[:informatique:api-rest:postgrest-dockeriser|dockeriser postgresql/postgis/postgrest]] |
| |
| | ===== Questions de sécurité ===== |
| | ==== Exposition des tables ==== |
| | Par défaut, PostgREST va exposer les tables de la base de données, divulguant ainsi le schéma de la base. |
| | Pour éviter cela, on peut créer des vues qui vont réaliser les jointures permettant de retourner une vue (//à plat//) et masquer d'éventuels attributs/champs de table qu'on ne souhaite pas divulguer. |
| | |
| | ==== Les droits ==== |
| | Il est évidemment important de bien définir les droits… FIXME à préciser |
| | À minima, il faut bien définir un u |
| | On a vu plus haut l'utilisation d'un rôle anonyme qui n'a que des droits en lecture, puis un rôle //user// qui a des droits en écriture, associé à un jeton (Token) JWT si besoin. |
| | |
| | ==== Injection SQL ==== |
| | Le parser de postgREST utilise des requêtes préparées (//invulnerable to SQL injection//) :\\ |
| | https://docs.postgrest.org/en/stable/references/configuration.html#db-prepared-statements |
| ===== Pour aller plus loin, jointures… ===== | ===== Pour aller plus loin, jointures… ===== |
| [[:informatique:api-rest:postgrest-jointure-postgis|Jointure et insertion de lieux avec coordonnées géographique (geometry)]] | * [[:informatique:api-rest:postgrest-jointure-postgis|Jointure et insertion de lieux avec coordonnées géographique (geometry)]] |
| | * [[https://postgis.net/documentation/tips/tip-move-postgis-schema/]] pbm //type "geometry" does not exist// lié à l’extention postgis/schéma //public//. |
| |