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

Symfony PHP Discussion :

Securisez API REST [3.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    .
    Inscrit en
    Avril 2016
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Avril 2016
    Messages : 108
    Points : 49
    Points
    49
    Par défaut Securisez API REST
    Bonjour,

    Actuellement en train de développez un API REST, je me retrouve sur une partie cruciale qui est la sécurisation !
    Après pas mal de lecture tout cela me semble encore un peu floue et j'aimerai avoir vos avis et vos retours d’expérience sur ce sujet afin de faire le tri et partir dans la bonne direction.

    Tout dabord, j'ai vu que Oauth et JWT étaient les deux approches recommandés pour sécurisez les requetes entre mon api et les applications Android et web qui seront rattachés dessus.
    Du coup je suis déja perdu sur ce point la, j'ai un peu plus compris le fonctionnement du JWT que de Oauth, peut on en utiliser un indépendamment de l'autre mais surtout qu'est ce qu'y est recommandé ?

    Aussi j'ai lu qu'il faut donner une clé d’API permettant d’identifier les applications et une clé secrète permettant de signer les requêtes et de les d’authentifier aupres de l'API .Ces deux clés je n'ai pas bien compris comment je dois les générer ? Et est ce que c'est Oauth ou JWT qui s'occupe de ça ?

    Autre point, la gestion des roles des utilisateurs j'ai du mal à voir comment sur une requête je peux vérifier le rôle de l'utilisateur pour bloquer des ressources qui ne lui seraient pas accessible ?

    J'ai un dernier point un peu plus specifique à mon cas ou j'aurai aimé avoir votre avis, du coté de l'appli mobile un utilisateur pourra s'enregistrer simplement en entrant son adresse mail ( il pourra toujours mettre ses infos a jour plus tard par l'update ) , cela peut il posé un problème avec l'utilisation de Jwt ou Oauth ?

    Je sais que j'ai posé beaucoup de questions mais c'est une partie assez importante ou je n'ai pas envie de louper, merci à tous ceux qui pourront m'apporter de l'aide !

    Cordialement,

  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 222
    Points
    20 222
    Par défaut
    Du coup je suis déja perdu sur ce point la, j'ai un peu plus compris le fonctionnement du JWT que de Oauth, peut on en utiliser un indépendamment de l'autre mais surtout qu'est ce qu'y est recommandé ?
    Ce sont deux moyen d'authentifier l'utilisateur. Tu utilises soit l'un soit l'autre.
    J'ai une préférence pour jwt qui est plus simple à implémenter tant coté serveur que client.

    Ces deux clés je n'ai pas bien compris comment je dois les générer ? Et est ce que c'est Oauth ou JWT qui s'occupe de ça ?
    Pour la clé API ca va dépendre de ta politique. Soit tu créer une clé API par "client". Par exemple une clé pour l'appli android et une pour l'appli IOS. Tu peux donc les générer manuellement et les stocker (bdd, fichier , etc ..)
    Soit tu créer un clé api par compte utilisateur , auquel cas il faudra la générer automatiquement.
    Peut importe le format , une chaine aléatore de X caractère peut convenir. JWT ou Oauth ne rentre pas en jeu ici

    Pour la clé secrète c'est la même chose , même si je préconise plutôt une clé par compte utilisateur.

    Autre point, la gestion des roles des utilisateurs j'ai du mal à voir comment sur une requête je peux vérifier le rôle de l'utilisateur pour bloquer des ressources qui ne lui seraient pas accessible ?
    Avec JWT tu peux tout à fait stocker les droits de l'utilisateur dans le token et les vérifier au moment o utu recois le token avec chaque requête. L'utilisateur ne pourras pas les modifier sans rendre le token invalide.
    L'autre solution c'est à chaque requête récupérer l'utilisateur ayant fait la requête via login/mdp ou token , etc et d'interroger la base de données pour connaitre les droits de cet utilisateur.

    cela peut il posé un problème avec l'utilisation de Jwt ou Oauth ?
    Non si ce n'est que le endpoint servant à créer le compte doit être ouvert car le compte n'aura pas encore de clés attribuer au moment de la création.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Homme Profil pro
    .
    Inscrit en
    Avril 2016
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Avril 2016
    Messages : 108
    Points : 49
    Points
    49
    Par défaut
    Merci pour ta réponse,

    Je pense implémenter Jwt qui m'a l'ai aussi plus facile à mettre en place, ou du moins c'est celui que j'ai l'impression de mieux comprendre.

    Concernant la clé d'API, en lisant la documentation du bundle https://github.com/lexik/LexikJWTAut...n-reference.md , il y a une étape de génération de clé public et privée, de plus je pensais qu'il était possible d'avoir une seule clé publique et privée et il aurait fallu simplement les données aux différents clients afin qu'ils puissent s'identifier aupres du serveur, sans avoir à en créer de nouvelles à chaque fois, pas possible ?

    En tout cas merci pour ce retour qui réponds déjà à pas mal de question !

  4. #4
    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 222
    Points
    20 222
    Par défaut
    Je ne n'utilise pas symfony , je ne pourrais donc pas répondre au niveau du bundle.

    Tu as une clé publique (clé d'api) par utilisateur ou éventuellement par "client" (mobile,navigateur, etc...). Mais elle n'est généré qu'une seule fois et réutilisé à chaque fois.
    Idem pour la clé privée , qui va servir à la signature des requêtes . Elle est générée une fois , puis transmise au client et ensuite utilisée (mais jamais envoyée dans les requêtes comme on le fait avec la clé publique).

    Au niveau requête ca se traduit en général par 2 entêtes :

    un header du genre
    x-api-key : azertyuiop123465 <== clé publique , transmise à chaque requête. Permet par exemple de vérifier les quotas d'accès à l'API , de révoquer ou non un accès , etc ...
    x-req-sign : *ù$231:ùmlsdlkùm==)àçé <== hash résultant de la clé privée + autre chose , qui permettra de vérifier l'intégrité/authenticité de la requête coté serveur. En gros permet d'être certains que personne n'a intercepté la requête pour la modifier.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Homme Profil pro
    .
    Inscrit en
    Avril 2016
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Avril 2016
    Messages : 108
    Points : 49
    Points
    49
    Par défaut
    Bonjour,

    Je me permet de déterrer cette discussion pour un problème spécifiques a lexikJWTAuthenticationBundle, dans les premières étapes quand je lance la commande afin de générer la clé publiques :
    openssl genrsa -out config/jwt/private.pem -aes256 4096 :
    Generating RSA private key, 4096 bit long modulus
    .................................................................................................................................................................................................................................................................................................................++
    ..............................................++

    Je me retrouve avec ça mais la commande n semble jamais ce finir je suis obligé de faire CTRL C pour quitter, le fichier c'est bien créer mais il semble vide puisque à la génération de la clcé privée j'ai :
    unable to load Private Key
    12568:error:0906D06CEM routinesEM_read_bio:no start line:pem_lib.c:707:Expecting: ANY PRIVATE KEY

    Quelqu'un aurait il déjà utilisé ce bundle est pourrait me renseigner ?

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

Discussions similaires

  1. API REST de Google
    Par stade13 dans le forum APIs Google
    Réponses: 3
    Dernier message: 29/10/2011, 11h02
  2. [XML] API REST : comment ca marche ?
    Par chuckichucki dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 18/01/2011, 13h33
  3. [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