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

API standards et tierces Java Discussion :

DropBox et 'refresh token'


Sujet :

API standards et tierces Java

  1. #1
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut DropBox et 'refresh token'
    Bonjour,

    j'ai développé une application qui utilise les API DropBox pour télécharger et téléverser des fichiers dans un espace DropBox.
    Cela fonctionnait très bien jusqu'à ce que la politique de sécurité change, en limitant le temps de validité du jeton d'accès pour l'identification.
    Il faut maintenant re-demander toutes les 4 heures un nouveau token pour obtenir le droit d'accès à l'espace de stockage.

    Comment obtenir ces token via le programme, sans que l'utilisateur ne soit obligé de faire une manip via une page WEB ?

    Cette question existe des centaines de fois sur le NET, mais avec des réponses du genre 'Voyez le mode d'emploi...' ou des bribes de code "HTTPS://..."...
    Je ne vois pas l'ombre d'une solution...

    Quelqu'un a-t-il déjà rencontré et résolu ce problème ?

    Merci par avance...
    @ bientôt...

    Salut & @+ sur 3W!

  2. #2
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    après avoir parcouru des dizaines et dizaines de pages internet , voici la solution que j'ai mis en place chez moi:
    Ceux qui sont confrontés à ce problème, connaissent certainement déjà la procédure qui consiste à lier l'application développée, au système DropBox:

    Étape N°1: déclarer son application auprès du système DropBox "DBX Platform" située ici.
    Ce portail vous permet d'obtenir la clé et code secret (KeyApp et Secret), attribuées à votre application par la plateforme DBX.
    Ces éléments doivent être intégrés à votre logiciel, afin que celui-ci puisse obtenir, le moment voulu, un jeton d'accès via l'API DropBox.

    Étape N°2: votre logiciel doit permettre à l'utilisateur de lier sa DropBox, à l'application développée par vous.
    Pour cela, le programme doit proposer la procédure suivante:
    1. Amener l'utilisateur vers la page Internet, de liaison 'Application/DropBox'
    2. L'utilisateur obtient un code unique fournit par cette page; qu'il devra renseigner dans votre logiciel (via un copier-coller dans un champ de saisie probablement)
    3. Finaliser l'enregistrement de l'application, afin que votre programme obtienne le(s) jeton(s) d'accès, appelé TOKEN(s)


    Nota: j'ai mis TOKEN(s) car auparavant, nous obtenions un TOKEN valable indéfiniment auprès de la plateforme DBX. Or maintenant, le TOKEN délivré n'est valable que 4 heures. Il faut donc, à chaque utilisation de votre logiciel, que ce dernier récupère un nouveau TOKEN... or on ne peut pas demander à l'utilisateur de votre programme, de re-passer à chaque fois par cette procédure ... j'expliquerai plus loin, comment votre programme fera pour obtenir automatiquement, un nouveau TOKEN, sans re-passer par cette 1ère phase.

    En attendant, voici quelques lignes de code permettant d'aller jusqu'à l'obtention du 1er TOKEN initial.
    Bien entendu, vous avez déjà en votre possession la clé et code secret (KeyApp et Secret ), obtenus via la plateforme DBX.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DbxAppInfo dbxAppInfo = new DbxAppInfo( "votreCleApplication", "votreCodeSecretApplication" );
    DbxRequestConfig dbxRequestConfig = new DbxRequestConfig( "nomDeVotreApplication" )); // C'est le nom que vous avez déclaré à la plateforme DBX lors de l'étape N°1
    DbxWebAuth dbxWebAuth = new DbxWebAuth( dbxRequestConfig, dbxAppInfo );
    Request webAuthRequest = DbxWebAuth.newRequestBuilder().withNoRedirect().withTokenAccessType( TokenAccessType.OFFLINE ).build();
    String sUrlAuthorisation = dbxWebAuth.authorize( webAuthRequest );
    Notez que dans la ligne 4, on prépare la demande d'un TOKEN de type "TokenAccessType.OFFLINE"
    En finalité, sUrlAuthorisation contiendra une adresse HTTP amenant l'utilisateur vers le portail de demande du TOKEN initial.

    Il suffira dès lors de faire ouvrir un navigateur internet par votre programme, pour que l'utilisateur se retrouve sur le portail de liaison 'Application/DropBox', et obtienne le code de finalisation. Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
    {
      Desktop.getDesktop().browse( new URI( "sUrlAuthorisation" )));
    }
    catch( IOException | URISyntaxException e )
    {
      JOptionPane.showMessageDialog( null, "Impossible d'ouvrir votre navigateur Internet, avec l'adresse spécifiée.", "ACTION IMPOSSIBLE", JOptionPane.WARNING_MESSAGE );
    }
    Il faut maintenant, demander à l'utilisateur, de fournir à votre programme, le fameux code de finalisation (Par un copier-coller par exemple).
    Une fois cet élément renseigné, votre programme devra engager la procédure suivante pour obtenir le TOKEN initial:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DbxAppInfo dbxAppInfo = new DbxAppInfo( "votreCleApplication", "votreCodeSecretApplication" );
    DbxRequestConfig dbxRequestConfig = new DbxRequestConfig( "nomDeVotreApplication" ));
    DbxWebAuth dbxWebAuth = new DbxWebAuth( dbxRequestConfig, dbxAppInfo );
     
    try
    {
      dbxAuthFinish = dbxWebAuth.finishFromCode( txtCodeDBX.getText().trim()); // txtCodeDBX est un JTextField contenant le "code" inscrit par l'utilisateur
    }
    catch( DbxException dbxE )
    {
      JOptionPane.showMessageDialog( null, "GROS PROBLEME", "Echec d'authentification DropBox.", JOptionPane.ERROR_MESSAGE );
      return;
    }
    dbxAuthFinish contient des informations intéressantes:
    • dbxAuthFinish.getAccountId(), le N° de compte attribué à cet utilisateur
    • dbxAuthFinish.getUserId(), l'identifiant attribué à cet utilisateur

    ... et contient des informations essentielles:
    • String sDbxTokenRegistre = dbxAuthFinish.getAccessToken(), le TOKEN initial, qui ne sera valable que 4 heures
    • String sDbxRefreshTokenRegistre= dbxAuthFinish.getRefreshToken(), le 'REFRESH_TOKEN', qui vous permettra d'obtenir à chaque nouvelle session, un nouveau TOKEN

    Ces 2 éléments devront être mémorisés par votre programme, pour pouvoir ensuite, accéder à la DropBox liée.

    Comment établir maintenant, une connexion de téléchargement ou téléversement avec la DropBox liée...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DbxCredential confirmeIdentite = new DbxCredential(
      sDbxTokenRegistre, // Le TOKEN initial (qui n'était valable que 4 heures)
      -1L, // Durée désirée de connexion, dans ce cas, illimitée
      sDbxRefreshTokenRegistre, // Le fameux 'REFRESH_TOKEN'
      "votreCleApplication",
      "votreCodeSecretApplication" );
     
    DbxRequestConfig dbxRequestConfig = new DbxRequestConfig( "nomDeVotreApplication" );
    DbxClientV2dbxClient dbxClient = new DbxClientV2( dbxRequestConfig, confirmeIdentite );
    Voilà, l'objet dbxClient vous donne accès à toutes les fonctionnalité de l'API DropBox.
    J'espère que ce post (qui finalement ressemble à un tuto) est suffisamment clair pour éviter aux intéressés, de perdre des heures de recherche sur Internet .


    Remarque importante: les lignes de code exemple sont établies pour l'API V7 de DropBox. Veillez à avoir la bonne bibliothèque API.
    @ bientôt...

    Salut & @+ sur 3W!

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

Discussions similaires

  1. probleme refresh token
    Par sky88 dans le forum Laravel
    Réponses: 0
    Dernier message: 22/05/2022, 17h14
  2. [4.x] authentification LDAP | refresh token
    Par ska_root dans le forum Symfony
    Réponses: 0
    Dernier message: 05/03/2020, 16h35
  3. OAuth2 - Client Credentials Grant - Refresh Token
    Par foxdie dans le forum Sécurité
    Réponses: 1
    Dernier message: 21/02/2019, 15h19
  4. Refresh et access token jwt
    Par kelinox dans le forum Android
    Réponses: 5
    Dernier message: 06/10/2017, 00h22
  5. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 09h38

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