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

Django Python Discussion :

API rest avec oAuth2


Sujet :

Django Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Points : 6
    Points
    6
    Par défaut API rest avec oAuth2
    Bonjour à tous,
    j'ai une application web qui tourne très bien avec Django, c'est d'ailleurs plus un poc qu'une application utilisable en prod.
    Ce que je voudrais, c'est de faire de ce poc une API rest, qui serait intérogée :
    - soit par le site front qui tournera avec angularjs
    - soit par une application mobile
    - soit par un client lourd
    - soit par un terminal
    - soit par ...
    ...

    dans l'idée, pas de soucis, avec DJango ca marche très bien, je vais donc utiliser django-rest pour l'interfacage.

    Le probleme vient plutot de l'authentification. Avec Django tout va bien, tout se passe en HTTP, generic views toussa.
    Avec django-rest, la doc nous amene plein d'authentification possibles, Session, Token, OAuth ...

    Question 1: Quel est la meilleur solution à adopter ?
    Ma réponse. Dans la mesure ou l'API est disponible via des clients différents, avec des contexts différents, l'utilisation de tokens me semblent plus qu'adaptées et vu que oauth2 est (toujours selon la doc) plus secure que les TokenSession, alors partons sur oauth2

    Question 2: comment qu'on fait ?
    Le probleme est bien la. J'ai beau lire la doc django-rest, celle de oauth, des exemples, la pour le coup je cale rien.

    Ex: j'ai un user qui a un compte chez moi: c'est Jean.

    Jean est sur le site, il a sa fenêtre de connexion, il renseigne son login et son mdp il valide et la, .... Il se passe quoi ? On envoie quoi et ou ? Le serveur retourne quoi ? Des fois je lis qu'il faut utiliser la methode login() de Django, des fois je lis qu'il faut implémenter du custom ...
    Une fois Jean loggué, il requete l'API. Je suppose donc que l'on doit y mettre les token que le serveur nous a renvoyé un moment dans les headers, c'est ca ?

    Ca c'est pour le scenario ou Jean est sur son browser. Imaginons maintenant qu'il requete l'API avec sont terminal et curl. Ca se passe comment ?

    Voila désolé, c'est un beau pavé mais je suis vraiment embété la

    Merci de votre aide.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par jm54_ Voir le message
    Le probleme vient plutot de l'authentification. Avec Django tout va bien, tout se passe en HTTP, generic views toussa.
    Avec une API tout est HTTP aussi, non?

    Une fois Jean loggué, il requete l'API. Je suppose donc que l'on doit y mettre les token que le serveur nous a renvoyé un moment dans les headers, c'est ca ?
    REST étant 'stateless', authentifier chaque requête n'est possible qu'en ajoutant des informations dans les headers.
    Dire "Jean loggué" est une notion 'statefull'.

    Question 2: comment qu'on fait ?
    Le probleme est bien la. J'ai beau lire la doc django-rest, celle de oauth, des exemples, la pour le coup je cale rien.
    Django est un framework utilise pour faire des sites Web et des applications Web. Autrement dit l'interface utilisateur sera le navigateur: la requete HTTP retourne (en general) un document HTML.
    Une API REST est un protocole RPC construit sur HTTP permettant d’échanger (en général) des messages JSON ou XLM.
    Cote infrastructure a mettre en œuvre, il y a beaucoup de similitudes et c'est ce qui permet de réaliser une extension django-rest.
    Mais cote philosophie et design, cette cohabitation n'aide pas a comprendre que ce sont 2 mondes complètements différents.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    merci pour la réponse.
    Passé la théorie, je cherche des réponses précises quand à la mise en place de oauth2.

    Jean est sur le site, il a sa fenêtre de connexion, il renseigne son login et son mdp il valide et la, .... Il se passe quoi ? On envoie quoi et ou ? Le serveur retourne quoi ? Des fois je lis qu'il faut utiliser la methode login() de Django, des fois je lis qu'il faut implémenter du custom ...

    Merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Jean est sur le site, il a sa fenêtre de connexion, il renseigne son login et son mdp il valide et la, .... Il se passe quoi ? On envoie quoi et ou ? Le serveur retourne quoi ?
    Cela fait une requete HTTP equivalente comme le dit documentation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl -X POST -d "client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=password&username=YOUR_USERNAME&password=YOUR_PASSWORD" http://localhost:8000/oauth2/access_token/
    Le serveur doit retourner un JSON:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"access_token": "<your-access-token>", "scope": "read", "expires_in": 86399, "refresh_token": "<your-refresh-token>"}
    Django n'a pas le choix: il ne fait qu’implémenter le "standard" OAUTH2 du RFC 6749. Ce que vous lisez dans la doc sont des cut&paste ou des renvois de ce standard.

    Si vous voulez "voir" ces échanges, vous pouvez faire une capture des packets avec un outil comme Wireshark.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci wiztricks !

    en fait je crois que j'ai un probleme avec la notion de client.

    Voila ce que je vois/comprends.
    Jean est le resource owner.
    Il utilise 2 clients:
    - son navigateur sur foo.com qui est une application angularjs
    - un client lourd java

    api.foo.com est le resource server. C'est un Django / django-rest.
    oauth2 gère l'authentication.
    Les autorisations sont gérées par django/django-rest

    Si Jean veut voir le contenu des voitures sur foo.com/#cars, il faut qu'il soit loggué.
    Il a donc crée un compte ou on lui a demandé son email et un mot de passe.
    Le compte est validé, il peut donc se connecter avec ces même login/mdp.
    Au moment ou une fois loggué, il va sur foo.com/#cars/, une requete est faite sur api.foo.com/cars/ qui retourne la liste des voitures sous un format JSON.

    Voila comment je vois les chose et je pense ne pas beaucoup me tromper.
    La ou j'ai du mal c'est pour la partie 'client' donc. La doc django-rest nous dit que l'on doit créer un cient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    You can create a client, either through the shell, or by using the Django admin.
    Seulement si y'a 1000 utlisateurs qui passent par leur navigateurs, les 1000 vont avoir le meme client_id ?? Je ne crois pas. On a donc 1000 clients différents. Quand ces clients sont-ils alors créés ? Au moment ou Jean à fait son inscription sur le site foo.com ?
    Idem pour le client java, Jean doit demander la creation d'un client sur la plateforme avant de pouvoir avoir la liste des voitures ?


    C'est incroyable vraiment j'ai du mal avec tout ca mais comme on dit il n'y a pas de questions bêtes

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par jm54_ Voir le message
    Il a donc crée un compte ou on lui a demandé son email et un mot de passe.
    Le compte est validé, il peut donc se connecter avec ces même login/mdp.
    Au moment ou une fois loggué, il va sur foo.com/#cars/, une requete est faite sur api.foo.com/cars/ qui retourne la liste des voitures sous un format JSON.
    Ah je crois comprendre.
    Vous allez a l'URL du RFC.
    Vous cherchez "[Page 10]".
    A la suite, une sorte de diagramme de séquence montre les différences entre:
    - l'utilisateur qu'on enregistre dans une BDD,
    - la négociation du token avec le serveur de token,
    - son utilisation pour accéder aux ressources,

    C'est incroyable vraiment j'ai du mal avec tout ca mais comme on dit il n'y a pas de questions bêtes
    *FLAME ON*
    Des frameworks comme Django permettent de réaliser rapidement une application Web en gardant le focus sur le fonctionnel et en proposant du prêt a l'emploi pour ce qui est configuration, déploiement,...
    L'avantage est de ne pas avoir a refaire des trucs fastidieux et répétitifs.

    Réduire le temps de codage a l'avantage de pouvoir le faire réaliser par un ingénieur. On le paiera plus "cher" moins longtemps. Cette polyvalence permettra de l'employer "plus" sur la durée du projet.
    Cela permet aussi de réduire le nombre de personnes: moins de pertes d'informations, plus de cohérence cote livrables, ...

    Sans "framework", on devrait diviser le travail entre conception et réalisation et embaucher des "codeurs" payes moins cher mais plus longtemps.

    En masquant la complexité des piles techniques, on permet aussi a un stagiaire de construire un serveur Web sans trop savoir ce qui se passe sous le capot. Ce qui fait le site Web encore moins cher.

    Et de pauvres bougres mendiant des réponses a des questions qu'ils ne savent pas poser dans les forums.
    note: ce que je pense n'a rien de personnel.
    *FLAME OFF*

    Bonne continuation.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    l'interet de ce gout de gueule est il légitime ? A mon sens non, il y a une différence entre se documenter et comprendre.
    Je partage votre avis sur les framework et sur les méthodes de ventes de solutions orchestrées par beaucoup d'agences.
    Maintenant je pense aussi que les forums sont des lieux d'échanges et que d'autres personnes se poseront sans doute les memes questions que moi sans oser demander.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 16
    Points : 22
    Points
    22
    Par défaut
    je ne comprends pas non l'interet de la réponse wiztricks, si c'est pour répondre RTFM autant ne rien dire.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par gorjuce Voir le message
    je ne comprends pas non l'interet de la réponse wiztricks, si c'est pour répondre RTFM autant ne rien dire.
    Ben ouais mais les réponses aux questions posées sont a la page 10 du RFC et je ne vois pas trop l’intérêt d'un "cut&paste".

    La sécurité est un sujet sérieux qui engage votre responsabilité.
    Si vous n’êtes pas assez a l'aise sur ces questions, faites faire plutôt que de faire courir le risque d'un n'importe quoi a votre employeur ou a vos clients.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Aucun débat à avoir, tout le monde doit apprend à marcher un jour. Maintenant des questions ont été posées, vous n'avez pu apporter aucune réponse, je note donc que l'enseignement n'est pas votre qualité principale.

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    La sécurité est un sujet trop important pour qu'on s'amuse a construire une solution a votre place. Faites faire ou ayez la patience d'apprendre est le seul choix raisonnable qu'un professionnel puisse vous proposer.

    C'est ma position.
    Ceci dit, elle n'engage que moi.
    D'autres pourront exprimer un avis différent.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. API REST avec Android
    Par Heartlessmdh dans le forum Android
    Réponses: 1
    Dernier message: 22/04/2015, 15h06
  2. Intégration API RestFul avec un Jetty Server
    Par jessyJ dans le forum Services Web
    Réponses: 0
    Dernier message: 29/06/2014, 20h22
  3. [BI4] [BO XI] Gestion des utilisateurs avec l'API RESTful
    Par bjorge dans le forum Webi
    Réponses: 2
    Dernier message: 10/02/2014, 11h24
  4. Réponses: 0
    Dernier message: 25/11/2013, 15h22
  5. Api mysql avec Devc++, erreur de compilation
    Par Viiince dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 15/06/2004, 17h19

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