web-dev-qa-db-fra.com

eBay oauth token and refresh tokens

éprouve des difficultés depuis quelques jours avec l'authentification par jeton eBay. J'ai du mal à comprendre comment récupérer de nouveaux jetons, après m'être inscrit à un compte de programme développeur, j'ai demandé le jeu de clés et je l'ai obtenu, ensuite j'accorde l'accès au jeton Auth'n'Auth qui promet de durer 18 mois , et oui, le jeton ne fonctionne que sur les API de trading, de shopping et de recherche.

Mais lorsque vous devez exécuter des API d'achat, de vente et de commerce, vous devez obtenir des jetons oauth. Et vous pouvez utiliser le style appelé "Application mono-utilisateur" et vous connecter oauth de User Token Tool, et obtenez un oauth avec 2 heures d'expiration.

Plus tard, le jeton expire et vous perdez un peu l'accès aux API mentionnées ci-dessus. J'ai essayé de récupérer des jetons à partir de Trading> Get ID session, Trading> Fetch token, mais après avoir fourni l'ID de session à Fetch token, il dit: "L'utilisateur final n'a pas terminé le flux de connexion Auth & Auth." bien qu'il existe un jeton valide de 18 mois, il continue de renvoyer cette erreur.

Y a-t-il un exemple d'article à ce sujet, que n'importe qui aurait pu lire ou écrire?

18
mentorgh

Cela détaille le processus OAuth de l'API "New Sell", pas auth 'n' auth ou l'ancienne API de trading. C'est aussi pour le sandbox, bien que la procédure de Production soit la même.

Votre confusion n'est pas injustifiée. Mes propres expériences avec ce flux d'API, ainsi que celles d'une grande partie des forums de développement officiels , ont été stressantes. Ce qui suit détaille la procédure pour générer un oauth non pertinent de savoir si vous vous connectez à un un seul , dédié, compte ou plusieurs comptes d'utilisateurs.

Il y a le guide officiel , qui explique tout le processus, donc j'hésite à recréer le guide entier ici. Je peux cependant fournir un résumé (je conseille de suivre les instructions ci-dessous en utilisant Postman avant d'essayer via votre application):

  1. Rassemblez votre ID client et votre secret client ici ( ne les partagez pas publiquement )
  2. Générez un RuName (URL de redirection) à partir de ici en cliquant sur "Obtenez un jeton d'eBay via votre application" et remplissez la forme. Ce formulaire sert à créer l'apparence de la page de connexion que les utilisateurs seront redirigés pour permettre à votre application d'accéder à leur compte. Le RuName apparaîtra alors directement sous l'en-tête de colonne "RuName (nom de l'URL de redirection eBay)"
  3. Rassemblez la liste des portées dont vous avez besoin. Chaque point de terminaison API nécessite un jeton OAuth avec les autorisations d'étendue appropriées. Le point de terminaison Créer ou remplacer un élément d'inventaire , par exemple, nécessite le https://api.ebay.com/oauth/api_scope/sell.inventory portée. Déterminez les points de terminaison dont vous aurez besoin et accédez au document API pour chacun et recherchez la section d'étendue.
  4. La requête get ressemble maintenant à ceci:

    `https://signin.sandbox.ebay.com/authorize?
    client_id=<your-client-id-value>&
    redirect_uri=<your-RuName-value>&
    response_type=code&
    scope=https%3A%2F%2Fapi.ebay.com%2Foauth%2Fapi_scope%2Fsell.account%20
    https%3A%2F%2Fapi.ebay.com%2Foauth%2Fapi_scope%2Fsell.inventory`
    

    Il est également recommandé d'ajouter une chaîne de requête state, que j'ai omise pour faciliter l'utilisation, mais vous devez rechercher ce qu'elles sont et pourquoi elles sont recommandées pour OAuth.

  5. Cette URL dans un navigateur vous redirigera vers une page de connexion pour que l'utilisateur autorise votre application à accéder à son compte, mais uniquement pour les étendues de l'URL. Dumpé d'une PHP curl request vous obtiendrez l'URL de redirection elle-même. Important: Un signe de l'utilisateur final est nécessaire même si votre application n'aura qu'un seul utilisateur . Par exemple, vous avez un site de commerce électronique pour un client et vous souhaitez envoyer ses produits à leur compte eBay unique. Vous devrez toujours effectuer ce processus au moins une fois tous les 18 mois (découvrez pourquoi bientôt).
  6. Une fois que l'utilisateur s'est connecté et confirmé, le navigateur affichera une page "vous pouvez fermer cette fenêtre maintenant". Le code d'autorisation dont vous avez besoin pour l'étape suivante se trouve dans l'URL de cette page en tant que chaîne de requête code. Si vous développez une application pour plusieurs utilisateurs et prévoyez de les connecter réellement sur cette page, vous devez configurer votre application pour récupérer la réponse de confirmation, qui sera l'URL susmentionnée, et en extraire le code. Ce code est très éphémère. Si vous le récupérez manuellement via un navigateur, vous devez passer rapidement aux étapes suivantes.
  7. Vous devez maintenant effectuer une POST à https://api.sandbox.ebay.com/identity/v1/oauth2/token . Consultez la structure ci-dessous:

    HTTP method:   POST
    URL (Sandbox): https://api.sandbox.ebay.com/identity/v1/oauth2/token
    
    HTTP headers:
    Content-Type = application/x-www-form-urlencoded
    Authorization = Basic <B64-encoded-oauth-credentials> (A base64-encoded value made from your client ID and client secret, separated by colon. For example, in PHP you could generate it with: `base64_encode ("fakeclientid123:fakeclientsecret123")`)
    
    Request body (wrapped for readability):
    grant_type=authorization_code& (literally the string "authorization_code")
    code=<authorization-code-value>& (code retreived in previous step)
    redirect_uri=<RuName-value> (same RuName as earlier)
    

    En cas de succès, cette demande renverra quelque chose comme ci-dessous:

    {
        "access_token": "v^1.1#i^1#p^3#r^1...XzMjRV4xMjg0",
        "token_type": "User token",
        "expires_in": 7200,
        "refresh_token": "v^1.1#i^1#p^3#r^1...zYjRV4xMjg0",
        "refresh_token_expires_in": 47304000
      }
    

    Il y a le oauth jeton que nous recherchons, qui durera 2 heures . Le deuxième jeton est un jeton d'actualisation, qui durera environ 18 mois. Gardez ce jeton en sécurité et ne le partagez pas, ni ne le codez en dur dans votre application. À partir de ce moment, votre application doit effectuer des appels de rafraîchissement, en utilisant ce jeton, pour obtenir un nouveau oauth chaque fois que cela est nécessaire. Une fois les 18 mois écoulés, ou si l'utilisateur passe à nouveau par la procédure "Autoriser l'accès", vous devrez faire tout ce qui précède pour générer un nouveau jeton d'actualisation. En supposant que l'API n'a pas changé à ce stade.

    Il convient de noter que la durée de vie de 18 mois n'est pas une procédure normale pour l'actualisation OAuth, qui devrait normalement renvoyer un nouveau jeton d'actualisation chaque fois que l'ancien est utilisé.

  8. Pour rafraîchir une oauth:

      HTTP method:   POST
      URL (Sandbox): https://api.sandbox.ebay.com/identity/v1/oauth2/token
    
      HTTP headers:
        Content-Type = application/x-www-form-urlencoded
        Authorization = Basic <B64-encoded-oauth-credentials>
    
       Request body (wrapped for readability):
          grant_type=refresh_token&
          refresh_token=<your-refresh-token-value>&
          scope=https%3A%2F%2Fapi.ebay.com%2Foauth%2Fapi_scope%2Fsell.account%20
          https%3A%2F%2Fapi.ebay.com%2Foauth%2Fapi_scope%2Fsell.inventory
    

J'espère que ça aide!

38
FullStackFool

Pour ceux qui éprouvent des difficultés, assurez-vous que vous utilisez le code/jeton encodé.

J'ai presque perdu la tête en essayant de comprendre ce qui ne va pas parce qu'ebay retourne le jeton de rafraîchissement décodé

4
Dejell

Pour tous ceux qui éprouvent des difficultés, veuillez noter que l'URL à l'étape 4 est différente de l'URL indiquée sur eBay. L'URL sur eBay commence par https://auth.sandbox.ebay.com/oauth2/authorize, mais l'URL de l'étape 4 commence par https://signin.sandbox.ebay.com/authorize

1
Alex