Glossaire

Pourquoi un jeton d'accès LinkedIn expire au bout de 60 jours

Taras Shynkarenko
Taras Shynkarenko
Mis à jour : 9 min de lecture
Pourquoi un jeton d'accès LinkedIn expire au bout de 60 joursPourquoi un jeton d'accès LinkedIn expire au bout de 60 jours

TL;DR, Réponse Rapide

9 min de lecture

LinkedIn documente que « all access tokens are issued with a 60-day lifespan » et son exemple de réponse renvoie expires_in 5184000, exactement 60 jours. Les refresh tokens programmatiques durent 365 jours, ne se réinitialisent pas à l'usage, et sont réservés aux partenaires Marketing Developer Platform approuvés. Demander un nouveau scope invalide tous les jetons que vous détenez déjà. Le jeton de 60 jours de Meta renvoie 5183944 à la place, 56 secondes de moins, et son jeton de Page dérivé n'expire jamais.

Combien de temps dure un jeton d'accès LinkedIn ?

Émis par le flux authorization code, tout jeton d'accès LinkedIn porte la même horloge, et LinkedIn énonce le chiffre sans réserve : « Currently, all access tokens are issued with a 60-day lifespan. » Cette ligne se trouve dans le tableau des champs de réponse pour expires_in sur la page OAuth à trois pattes, qui est le flux qu'utilise toute intégration de publication.

L'exemple de réponse que LinkedIn publie sur cette page colle à la phrase à la seconde près :

{
  "access_token":"AQUvlL_DYEzvT2wz1QJiEPeLioeA",
  "expires_in":5184000,
  "scope":"r_basicprofile"
}

5 184 000 secondes font 60 jours pile, sans rien de rogné. Lisez tout de même le champ plutôt que la phrase. LinkedIn indique lui-même que « Access tokens stay valid until the number of seconds indicated in the expires_in field in the API response », et expires_in est la seule valeur qui reflète ce que votre jeton a réellement obtenu.

Quels jetons LinkedIn ont quelle durée de vie ?

Il y en a trois, et ils ne se ressemblent en rien.

IdentifiantDurée de vie documentéeD'où il vient
Authorization code30 minutesGET /oauth/v2/authorization
Jeton d'accès à trois pattes60 joursPOST /oauth/v2/accessToken
Jeton applicatif à deux pattes30 minutesgrant_type=client_credentials
Refresh token programmatique365 joursRenvoyé à côté du jeton d'accès

L'authorization code est celui sur lequel les gens trébuchent en premier. LinkedIn écrit que « the authorization code has a 30-minute lifespan and must be used immediately », et que s'il expire « you must repeat all of the previous steps to request another authorization code. »

Le jeton à deux pattes réserve un autre genre de surprise. La page client credentials de LinkedIn dit « The access token has a 30-minute lifespan and must be used immediately », et son exemple renvoie "expires_in": "1800" sous forme de chaîne entre guillemets plutôt que l'entier que renvoie le flux à trois pattes. Le deux pattes est aussi indisponible pour les API dont la plupart des outils de publication ont besoin : « 2-legged OAuth authentication is not available for Marketing APIs. »

Un téléphone affiche un écran de connexion, semblable à celui que LinkedIn présente pour réautoriser l'accès en l'absence de refresh token.

LinkedIn vous donne-t-il un refresh token ?

Seulement si LinkedIn vous a approuvé pour en avoir un. La page des refresh tokens s'ouvre sur la barrière : « LinkedIn supports programmatic refresh tokens for all approved Marketing Developer Platform (MDP) partners », et la page du flux authorization code le répète de l'autre côté, en disant que les refresh tokens programmatiques « are available for a limited set of partners. »

Si votre app n'est pas dans ce groupe, la voie de renouvellement documentée par LinkedIn n'est pas un grant type du tout. C'est renvoyer le membre par /oauth/v2/authorization. LinkedIn décrit cela comme transparent, et ça peut vraiment l'être, parce que l'écran de consentement est sauté quand deux conditions tiennent : « The member is still logged into www.linkedin.com » et « The member's current access token has not expired. » Ratez l'une des deux et votre utilisateur revoit l'écran d'autorisation complet.

D'où le conseil de LinkedIn de renouveler tôt : « Make sure your application refreshes access tokens before they expire, to avoid unnecessarily sending your application's users through the authorization process again. » Un jeton renouvelé le 55e jour se renouvelle en silence. Un jeton renouvelé le 61e jour ne peut plus se renouveler du tout.

Les partenaires approuvés échangent le refresh token à la place :

POST https://www.linkedin.com/oauth/v2/accessToken
 
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&refresh_token={refresh_token}&client_id={client_id}&client_secret={client_secret}

Combien de temps dure le refresh token LinkedIn ?

365 jours, et l'horloge ne se réinitialise jamais. LinkedIn écrit que « access tokens are valid for 60 days and programmatic refresh tokens are valid for a year », puis détaille la conséquence qui piège : « When you use a refresh token to generate a new access token, the lifespan or Time To Live (TTL) of the refresh token remains the same as specified in the initial OAuth flow (365 days), and the new access token has a new TTL of 60 days. »

L'exemple travaillé de LinkedIn mérite d'être lu au pied de la lettre :

  • Jour 1 : le refresh token a 365 jours, le jeton d'accès en a 60.
  • Jour 59 : le renouvellement donne un nouveau jeton d'accès de 60 jours, et le refresh token descend à 306 jours.
  • Jour 360 : « your access token and refresh token will both expire in 5 days (365-360=5) and you must get your application reauthorized by the member. »

Donc un refresh token vous achète environ six renouvellements silencieux, puis le membre doit cliquer Allow à nouveau. Il n'y a pas de fenêtre glissante, pas de rotation de refresh token qui repousse l'horizon, et aucune façon documentée d'en demander plus.

Que renvoie réellement refresh_token_expires_in ?

Ici LinkedIn se contredit, et l'arithmétique le rend évident. Le champ est documenté comme « The number of seconds remaining until the refresh token expires. » L'exemple de réponse sur la même page renvoie :

AdaptlyPost
AdaptlyPost

Essai gratuit de 7 jours

Analyses multiplateforme

Boîte sociale

Assistant IA

{
  "refresh_token_expires_in": 525600,
  "scope":"r_basicprofile"
}

525 600 secondes font 6,08 jours, ce qui n'est ni un an ni aucune durée de vie documentée par LinkedIn. 525 600 minutes font exactement 365 jours. L'exemple est en minutes alors que la description du champ dit secondes.

Le second exemple scelle l'affaire. Après un renouvellement, la page de LinkedIn affiche "refresh_token_expires_in": 439200. L'écart entre les deux valeurs est de 86 400, et 86 400 minutes font 60 jours, exactement l'intervalle que décrit l'exemple travaillé entre l'émission d'un refresh token et son premier usage. Les deux valeurs d'exemple sont cohérentes entre elles en minutes et absurdes en secondes.

Traitez la description du champ comme faisant autorité et les chiffres d'exemple comme une bavure de documentation. Si vous stockez une date d'expiration absolue, calculez-la à partir de ce que l'API vivante vous renvoie, pas à partir de l'un ou l'autre chiffre de cette page.

Un développeur consulte des journaux d'erreurs sur un ordinateur portable, le genre de vérification nécessaire quand un jeton LinkedIn cesse de fonctionner avant les 60 jours.

Qu'est-ce qui invalide un jeton d'accès LinkedIn avant 60 jours ?

Quatre choses, toutes documentées.

Demander un scope différent est celle qui surprend les développeurs, parce que rien ne casse visiblement jusqu'au moment où ça casse. LinkedIn écrit : « If you request a different scope than the previously granted scope, all the previous access tokens are invalidated. » Livrer une version qui ajoute une permission tue tous les jetons que détiennent vos utilisateurs existants. La même page avertit séparément que « If the scope permissions are changed in your app, your users must re-authenticate. »

La révocation par LinkedIn est la deuxième, et LinkedIn est franc sur le droit qu'il se réserve : « LinkedIn reserves the right to revoke Refresh Tokens or Access Tokens at any time due to technical or policy reasons. In such scenarios, the expectation from products leveraging Refresh Tokens is to fallback to the standard OAuth flow, and present the login screen to the end users. »

La révocation par le membre est la troisième. Un membre qui déconnecte votre app dans ses paramètres LinkedIn met fin à l'autorisation immédiatement.

Une tentative de renouvellement avec un identifiant mort est la quatrième, et elle renvoie une erreur précise : 400 invalid_request "The provided authorization grant or refresh token is invalid, expired or revoked". La colonne de résolution de LinkedIn ne propose qu'un seul remède, « reauthenticate the member to generate the new refresh token. »

Vous n'avez pas à deviner laquelle des quatre s'est produite. POST https://www.linkedin.com/oauth/v2/introspectToken prend votre client_id, votre client_secret et le token lui-même, et renvoie status à revoked, expired ou active, avec expires_at, created_at, authorized_at et auth_type. C'est l'appel à faire quand des posts LinkedIn planifiés cessent de fonctionner pour un compte et pour personne d'autre.

Quatre façons dont un jeton LinkedIn meurt avant terme
1
Changement de scope. Demander une nouvelle permission invalide tous les jetons d'accès déjà émis.
2
Révocation par LinkedIn. LinkedIn se réserve le droit de révoquer un jeton pour des raisons techniques ou de politique.
3
Révocation par le membre. Le membre déconnecte votre app depuis ses paramètres LinkedIn.
4
Tentative de refresh morte. Un refresh avec un jeton invalide, expiré ou révoqué renvoie une erreur 400, sans second essai.
Chacun de ces cas peut mettre fin à un jeton LinkedIn des jours avant sa durée de vie documentée de 60 jours.

En quoi cela diffère-t-il du jeton de 60 jours de Meta ?

Les deux plateformes disent 60 jours. Presque rien d'autre ne coïncide.

LinkedInMeta
Durée de vie documentée du jeton utilisateur60 jours« about 60 days »
expires_in renvoyé51840005183944
Mécanisme de renouvellementRé-autorisation, ou grant_type=refresh_token pour les partenaires MDPgrant_type=fb_exchange_token
Renouveler avec un jeton expiréNonNon
Option sans expirationAucune documentéeJeton d'accès de Page

Le chiffre de Meta est le bizarre. Son exemple de réponse renvoie "expires_in": 5183944, soit 56 secondes de moins que 60 jours, et la formulation de Meta est délibérément lâche : « long-lived tokens last about 60 days. » Meta ajoute ensuite une réserve que LinkedIn n'a pas, en vous disant de ne pas dépendre de la durée de vie parce que les jetons « may change without warning or expire early. » Le détail complet vit dans la note sur le jeton d'accès Facebook de longue durée.

La vraie divergence est ce que vous obtenez au bout de la chaîne. Meta vous laisse dériver un jeton d'accès de Page depuis un jeton utilisateur de longue durée, et dit que ceux-là « do not have an expiration date. » LinkedIn ne publie aucun équivalent et dit l'inverse en une seule ligne de sa section refresh : « To protect members' data, LinkedIn does not generate long-lived access tokens. » LinkedIn qualifie ainsi son propre jeton de 60 jours de courte durée.

Pour qui développe contre les deux, la forme pratique est celle-ci. Sur Meta, vous pouvez atteindre un identifiant qui survit à la session du membre. Sur LinkedIn, vous ne pouvez pas, donc l'invite de reconnexion est une caractéristique permanente de l'intégration plutôt qu'un état d'échec, et planifier des posts LinkedIn de façon fiable veut dire prévoir le jour où le membre devra recliquer sur Allow.

Questions fréquentes

Quelle valeur expires_in renvoie-t-il pour un jeton d'accès LinkedIn ?

5184000 dans l'exemple publié par LinkedIn, soit exactement 60 jours en secondes.

AdaptlyPost
AdaptlyPost

Essai gratuit de 7 jours

Analyses multiplateforme

Boîte sociale

Assistant IA

Peut-on prolonger un jeton d'accès LinkedIn au-delà de 60 jours ?

Non. LinkedIn émet un nouveau jeton de 60 jours, soit par un refresh token si votre app est un partenaire MDP approuvé, soit en renvoyant le membre par l'autorisation.

Combien de temps un authorization code LinkedIn est-il valide ?

30 minutes. LinkedIn écrit qu'il « must be used immediately » et qu'un code expiré oblige à répéter toutes les étapes précédentes.

Renouveler réinitialise-t-il l'expiration du refresh token ?

Non. LinkedIn indique que le TTL du refresh token « remains the same as specified in the initial OAuth flow (365 days) » quelle que soit la fréquence d'usage.

Pourquoi tous vos jetons LinkedIn ont-ils cessé de fonctionner en même temps ?

La cause la plus probable est un changement de scope. LinkedIn invalide tous les jetons d'accès déjà accordés quand votre app demande un scope différent de celui déjà accordé.

Comment vérifier si un jeton est révoqué ou expiré ?

Appelez POST https://www.linkedin.com/oauth/v2/introspectToken avec vos identifiants client et le jeton. Le champ status renvoie revoked, expired ou active.

Que se passe-t-il quand le refresh token LinkedIn expire en même temps que l'access token ?

L'exemple de LinkedIn place ce moment au jour 360, quand il reste cinq jours à l'access token comme au refresh token. Une fois cette fenêtre fermée, le membre doit repasser par l'autorisation, car aucun grant type ne peut renouveler un refresh token déjà expiré. La page consacrée au refresh token ne documente aucune façon de prolonger le refresh token lui-même.

Pourquoi la plupart des outils de publication ne peuvent-ils pas compter sur le jeton two-legged de LinkedIn ?

Le jeton client credentials ne dure que 30 minutes, et LinkedIn le documente comme indisponible pour les Marketing APIs, exactement la surface dont dépendent les outils de programmation et de publication. Sa réponse d'exemple renvoie même expires_in sous forme de chaîne entre guillemets, "1800", au lieu de l'entier renvoyé par le flux three-legged. Toute app qui publie au nom d'un membre doit utiliser le flux three-legged à la place.

Le chiffre de 5 184 000 secondes de LinkedIn correspond-il vraiment à son annonce de 60 jours ?

Il correspond exactement. La documentation de LinkedIn annonce une durée de vie de 60 jours, et la valeur d'exemple d'expires_in, 5184000 secondes, équivaut sans arrondi à exactement 60 jours. Cette précision rend d'autant plus visible, plus loin dans la même documentation, la confusion entre minutes et secondes du champ refresh_token_expires_in.

LinkedIn délivre-t-il un jour un jeton qui n'expire jamais ?

LinkedIn ne documente aucune option de ce genre. Chaque access token a une durée de vie de 60 jours, et l'entreprise écrit explicitement qu'elle ne génère pas de jetons d'accès longue durée, contrairement à Meta, qui permet de dériver d'un jeton utilisateur longue durée un Page access token sans date d'expiration.

Cet article vous a-t-il été utile ?

Dites-nous ce que vous en pensez !

Nous voir plus souvent sur Google

Un clic définit AdaptlyPost comme source préférée. Nos articles remontent alors dans vos À la une, en mode IA et dans les aperçus IA.

Avant de partir...

AdaptlyPost

AdaptlyPost

Planifiez vos contenus sur toutes les plateformes

Gérez tous vos comptes de réseaux sociaux en un seul endroit avec AdaptlyPost.

Analyses multiplateforme

Boîte sociale

Assistant IA

Termes connexes du glossaire

Articles Connexes