1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2017
    Messages : 3
    Points : 1
    Points
    1

    Par défaut Refresh et access token jwt

    Bonjour,

    Je suis actuellement en train de développer une appli mobile sous android studio. Faisant le système de login, je vais utiliser les tokens pour la connexion et la gestion de droit. J'utilise la bibliotèque jjwt : https://github.com/jwtk/jjwt
    Je suis actuellement capable de créer les tokens et de les décrypter en suivant la documentation github. Seulement, j'ai un petit souci lors de l'expiration du token. J'aimerai créer un refresh token lors du login et avec ce dernier créer des access tokens pour des questions de sécurités évidentes. J'ai bien compris le principe dans la théorie, seulement dans la pratique j'ai un peu de mal.
    Je ne sais pas exactement quelles sont les informations que doit contenir le refresh token, et je n'ai aucune idée de comment créer un access token à partir du refresh token.
    Si vous pouviez m'éclairer la dessus merci.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2007
    Messages
    25 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2007
    Messages : 25 257
    Points : 48 310
    Points
    48 310

    Par défaut

    un refreshtoken et un accesstoken on en général la même structure. C'est leur usage qui les différencie.


    Un refreshtoken est utilisé entre ton application et ton service d'authentification (A). Ton application lui dit en gros "hé, c'est toujours moi, tu peux me refiler un nouvel accessToken valide pendant 5 minutes?"
    Un accesstoken est utilisé entre ton application et le service (S) qui a besoin de savoir qui tu es, ton application s'amène avec et lui dit "hé, tiens A m'a filé ça pour prouver qui je suis, tu peux me filer mes données?"


    dans tous les cas se sont

    des JWT
    avec une signature cryptographique
    avec une date de validité (longue pour le refresh, courte pour l'access)
    avec du contenu (id utilisateur, groupes, whatever)

    le refreshtoken est secret, on ne le partage avec personnes d'autre que l'autorité qui l'a émise
    l'accesstoken est moins secret, on le partage avec toutes les app où on a besoin de montre patte blanche
    David Delbecq Java developer chez HMS Industrial Networks AB.     LinkedIn | Google+

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2017
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

    Ok, j'ai bien compris ce principe. Mon problème est que je vois pas comment faire la phase
    "hé, c'est toujours moi, tu peux me refiler un nouvel accessToken valide pendant 5 minutes?"
    à partir de mon refresh token.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2007
    Messages
    25 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2007
    Messages : 25 257
    Points : 48 310
    Points
    48 310

    Par défaut

    ben t'as un service, qui vérifie que t'as bien le refresh token (soit en parametre, soit dans tes headers, a décider) et qui génère un nouveau token, l'access token. Ce n'est pas très différent de créer un service qui prend l'accesstoken et qui te retourne tes données si tu y est autorisé.


    La difficulté c'est de faire tout ça correctement dans les règle avec tous les dangers coté sécurité et ce n'est pas sur une question qu'on répondra à tout, il y a pas mal de chose à gérer (révocation, communication entre serveurs en backend pour valider les tokens, tokens permanent, etc)


    Si t'as pas envie de t'emmerder avec cette partie, il existe déjà des serveur oauth qui font déjà tout le travail d'authentification et que tu peux réutiliser (keycloak par exemple)
    David Delbecq Java developer chez HMS Industrial Networks AB.     LinkedIn | Google+

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2017
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

    Quelle est la meilleur solution implémenté cela soit même ou alors utiliser une api toute faîte ?
    Car pour la révocation, communication entre le serveur tout le système peut être mis en place, il faut juste que je comprenne comment à partir d'un refresh token je peux générer un access token(tout en vérifiant qu'il est valable).

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2007
    Messages
    25 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2007
    Messages : 25 257
    Points : 48 310
    Points
    48 310

    Par défaut

    Sur cette partie là j'ai du mal à comprendre ce que tu trouve difficile. Un refresh token et un access token se valident exactement de la même façon. C'est juste que quand tu génère un refreshtoken tu le génère pour une longue période alors que quand tu génère un access token tu le génère pour une courte période. Le refresh token contient tout ce qu'il faut pour identifier l'utilisateur et le valider, comme tout bon JWT signé, l'access token même chose mais il est plus court. Après il est recommandé de garder un db des refreshtokent que t'as généré pour pouvoir les invalider coté serveur avant leur fin de vie. Et tu peux envisager de générer des accesstoken différents en fonction des services ciblés.

    Si tu as du mal avec ces concepts, je te conseille plutot de passer par une api d'authentification éprouvée et de suivre ses recommandation, sinon tu pars pour un gros plantage sécurité.
    David Delbecq Java developer chez HMS Industrial Networks AB.     LinkedIn | Google+

Discussions similaires

  1. Réponses: 0
    Dernier message: 22/09/2015, 17h08
  2. [Python 2.X] API tinder - access token facebook
    Par squadz dans le forum Général Python
    Réponses: 2
    Dernier message: 02/09/2015, 15h57
  3. user access token facebook
    Par alba.b dans le forum Facebook
    Réponses: 2
    Dernier message: 27/07/2015, 18h37
  4. open graph api facebook Access Token numéro téléphone
    Par mapmip dans le forum APIs Réseaux sociaux
    Réponses: 1
    Dernier message: 17/10/2014, 11h13
  5. [WinForm] recupérer access token drop box
    Par dharkan dans le forum C#
    Réponses: 1
    Dernier message: 28/05/2013, 13h50

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