IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

API Rest PHP et session [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut API Rest PHP et session
    Bonjour,

    je suis en train de développer une API avec un ensemble de méthodes en PHP.
    J'étais en train de faire comme d'habitude (appli web classique via browser) :
    - Authentification
    - Stockage en session de l'id utilisateur
    - Affichage des données métiers

    quand on m'a signifié que mes méthodes ne fonctionnaient pas. Après investigation, effectivement, les sessions ne sont pas enregistrées et malgré une authentification OK de l'utilisateur, son appel suivant tombe en KO (l'API ne trouve pas son ID).

    Après recherches, il semble qu'une API doivent être Stateless, sans session / contexte donc. Sauf que moi j'ai besoin d'identifier quel utilisateur s'est connecté pour lui renvoyer ses données.

    La lecture d'articles me pousse vers JWT qui permet de faire transmettre, entre autre, un information permettant d'identifier l'utilisateur connecté (le JWT est propagé pendant toute l'utilisation de l'API). Ce qui signifie qu'à chaque requête, je dois :
    - décryper le JWT pour retrouver l'ID utilisateur
    - "recalculer" ses droits en fonction de son profil (mon API gère plusieurs profils)
    avant de faire un requête qui récupère ses données.

    Est-ce la bonne démarche ?

    Fondamentalement, trimbaler l'ID dans chaque appel via JWT ne me pose pas de souci, mais le recalcul des droits à chaque appel pourrait être lourd.

    Merci de vos conseils !

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 224
    Points
    20 224
    Par défaut
    Est-ce la bonne démarche ?
    Oui.

    Pour les droits, si tu ne veux pas les recalculer , tu peux les inclure dans le token. Avec jwt tu as une partie "libre" ou tu stock ce que tu veux.
    Il faut juste éviter d'y mettre des données sensible comme des mot de passe.
    Si l'utilisateur venait à modifier ces données , le token serait alors invalide. Donc pas de risque d'attaque par élévation de privilèges

    Note toute fois que si tu fais ca , tu ne pourras pas changer des droits à la volée, il faudra forcément que l'utilisateur se "déconnecte" et regénère un token.

    En général ce qui se fait c'est :
    - requete type : api/login va générer un token si identifiants ok
    - On inclus ensuite le token dans une entête http custom. Ca permet coté client de la définir une bonne fois pour toute et de pas avoir à remettre le token en paramètre de chaque requête.

    Attention à ne pas donner une durée de vie trop longue au token (car c'est plus facile) , sinon ca créer des fenêtre de tir importante pour les petits malin. En général un token de 15min c'est pas mal.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    Merci grunk !
    La nuit portant conseil, j'ai prévu de stocker les droits dans un fichier json côté serveur après l'authentification car le token a une taille limitée et je ne maîtrise pas la taille de la string représentant les droits. De plus cela permet de laisser ces droits côté serveur.
    A la connexion je détruit le précédent fichier (identifié par le login de l'utilisateur + _date) et je génère un nouveau fichier de droits permettant de les recharger et à chaque appel j'utilise le fichier comme je le ferrai avec $_SESSION.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. API REST en PHP
    Par kstor4U dans le forum Langage
    Réponses: 8
    Dernier message: 05/02/2018, 15h31
  2. créer une api rest en php
    Par cyril_78 dans le forum Langage
    Réponses: 4
    Dernier message: 16/03/2017, 13h23
  3. [Silex][oauth2-server-php] API REST - Authorisation
    Par sebastien.bordat dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 02/08/2016, 09h14
  4. fonctionnement API-REST avec PHP
    Par missmatt1987 dans le forum Langage
    Réponses: 4
    Dernier message: 16/06/2016, 19h36
  5. [Authentification] API REstful PHP
    Par yoshï dans le forum REST
    Réponses: 1
    Dernier message: 22/07/2008, 09h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo