Glosario

Por qué un token de acceso de LinkedIn caduca a los 60 días

Taras Shynkarenko
Taras Shynkarenko
Actualizado: 9 min de lectura
Por qué un token de acceso de LinkedIn caduca a los 60 díasPor qué un token de acceso de LinkedIn caduca a los 60 días

TL;DR, Respuesta Rápida

9 min de lectura

LinkedIn documenta que "all access tokens are issued with a 60-day lifespan" y su respuesta de ejemplo devuelve expires_in 5184000, exactamente 60 días. Los refresh tokens programáticos duran 365 días, no se reinician al usarlos y están limitados a los partners aprobados del Marketing Developer Platform. Pedir un scope nuevo invalida todos los tokens que ya tengas. El token de 60 días de Meta devuelve 5183944 en su lugar, 56 segundos menos, y su Page token derivado no caduca nunca.

¿Cuánto dura un token de acceso de LinkedIn?

Cada token de acceso de LinkedIn emitido por el flujo de código de autorización lleva el mismo reloj, y LinkedIn da la cifra sin matices: "Currently, all access tokens are issued with a 60-day lifespan." Esa línea está en la tabla de campos de respuesta de expires_in de la página de OAuth de tres patas, que es el flujo que usa cualquier integración de publicación.

La respuesta de ejemplo que LinkedIn publica en esa página coincide con la frase al segundo:

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

5.184.000 segundos son 60 días exactos, sin recortar nada. Aun así, lee el campo y no la frase. La propia guía de LinkedIn dice que "Access tokens stay valid until the number of seconds indicated in the expires_in field in the API response," y expires_in es el único valor que refleja lo que tu token recibió de verdad.

¿Qué duración tiene cada token de LinkedIn?

Hay tres, y no se parecen en nada.

CredencialDuración documentadaDe dónde viene
Código de autorización30 minutosGET /oauth/v2/authorization
Token de acceso de tres patas60 díasPOST /oauth/v2/accessToken
Token de aplicación de dos patas30 minutosgrant_type=client_credentials
Refresh token programático365 díasDevuelto junto al token de acceso

El código de autorización es con el que tropieza primero la gente. LinkedIn escribe que "the authorization code has a 30-minute lifespan and must be used immediately," y que si caduca "you must repeat all of the previous steps to request another authorization code."

El token de dos patas es una sorpresa de otro tipo. La página de client credentials de LinkedIn dice "The access token has a 30-minute lifespan and must be used immediately," y su ejemplo devuelve "expires_in": "1800" como cadena entrecomillada en lugar del entero que devuelve el flujo de tres patas. El de dos patas tampoco está disponible para las APIs que necesitan la mayoría de herramientas de publicación: "2-legged OAuth authentication is not available for Marketing APIs."

Un teléfono muestra una pantalla de inicio de sesión, similar a la que LinkedIn presenta para reautorizar el acceso cuando no hay un refresh token disponible.

¿LinkedIn te da un refresh token?

Solo si LinkedIn te ha aprobado para ello. La página del refresh token abre con la barrera: "LinkedIn supports programmatic refresh tokens for all approved Marketing Developer Platform (MDP) partners," y la página del flujo de código de autorización lo repite desde el otro lado, diciendo que los refresh tokens programáticos "are available for a limited set of partners."

Si tu app no está en ese grupo, la vía de renovación documentada por LinkedIn no es un grant type. Es devolver al miembro por /oauth/v2/authorization. LinkedIn lo describe como algo transparente, y realmente puede serlo, porque la pantalla de consentimiento se salta cuando se cumplen dos condiciones: "The member is still logged into www.linkedin.com" y "The member's current access token has not expired." Si falla una de las dos, tu usuario vuelve a ver la pantalla de autorización completa.

Por eso el propio consejo de LinkedIn es renovar pronto: "Make sure your application refreshes access tokens before they expire, to avoid unnecessarily sending your application's users through the authorization process again." Un token renovado el día 55 se renueva en silencio. Un token renovado el día 61 ya no puede renovarse.

Los partners aprobados canjean el refresh token en su lugar:

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}

¿Cuánto dura el refresh token de LinkedIn?

365 días, y el reloj no se reinicia nunca. LinkedIn escribe que "access tokens are valid for 60 days and programmatic refresh tokens are valid for a year," y luego deletrea la consecuencia que pilla a la gente: "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."

El ejemplo desarrollado de LinkedIn conviene leerlo al pie de la letra:

  • Día 1: el refresh token tiene 365 días, el token de acceso tiene 60.
  • Día 59: renovar te da un token de acceso nuevo de 60 días, y al refresh token le quedan 306.
  • Día 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."

Así que un refresh token te compra unas seis renovaciones silenciosas y luego el miembro tiene que volver a pulsar Allow. No hay ventana móvil, ni rotación del refresh token que amplíe el horizonte, ni forma documentada de pedir más.

¿Qué devuelve en realidad refresh_token_expires_in?

Aquí LinkedIn se contradice, y la aritmética lo deja claro. El campo está documentado como "The number of seconds remaining until the refresh token expires." La respuesta de ejemplo de esa misma página devuelve:

AdaptlyPost
AdaptlyPost

Prueba gratis de 7 días

Analíticas multiplataforma

Bandeja Social

Asistente con IA

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

525.600 segundos son 6,08 días, que no es un año ni ninguna duración documentada de LinkedIn. 525.600 minutos son exactamente 365 días. El ejemplo está en minutos mientras que la descripción del campo dice segundos.

El segundo ejemplo lo remata. Después de una renovación, la página de LinkedIn muestra "refresh_token_expires_in": 439200. La diferencia entre los dos valores es 86.400, y 86.400 minutos son 60 días, que es justo el hueco que describe el ejemplo desarrollado entre emitir un refresh token y usarlo una vez. Los dos valores de ejemplo son coherentes como minutos y un disparate como segundos.

Trata la descripción del campo como autoritativa y los números de ejemplo como un desliz de documentación. Si guardas una caducidad absoluta, calcúlala con lo que te devuelve la API en vivo, no con ninguna de las dos cifras de esa página.

Un desarrollador revisa registros de errores en una laptop, el tipo de comprobación necesaria cuando un token de LinkedIn deja de funcionar antes de los 60 días.

¿Qué invalida un token de acceso de LinkedIn antes de los 60 días?

Cuatro cosas, todas documentadas.

Pedir un scope distinto es la que sorprende a los desarrolladores, porque nada se rompe a la vista hasta que se rompe. LinkedIn escribe: "If you request a different scope than the previously granted scope, all the previous access tokens are invalidated." Publicar una versión que añade un permiso mata todos los tokens que tienen tus usuarios actuales. La misma página avisa aparte de que "If the scope permissions are changed in your app, your users must re-authenticate."

La revocación por parte de LinkedIn es la segunda, y LinkedIn es tajante al reservársela: "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 revocación por parte del miembro es la tercera. Un miembro que desconecta tu app en su configuración de LinkedIn termina la concesión de inmediato.

Un intento de renovación con una credencial muerta es la cuarta, y devuelve un error concreto: 400 invalid_request "The provided authorization grant or refresh token is invalid, expired or revoked". La columna de resolución de LinkedIn ofrece un único remedio, "reauthenticate the member to generate the new refresh token."

No tienes que adivinar cuál de las cuatro ocurrió. POST https://www.linkedin.com/oauth/v2/introspectToken recibe tu client_id, tu client_secret y el propio token, y devuelve status como revoked, expired o active, junto con expires_at, created_at, authorized_at y auth_type. Esa es la llamada que hay que hacer cuando las publicaciones programadas de LinkedIn dejan de funcionar en una cuenta y en ninguna más.

Cuatro formas en que un token de LinkedIn muere antes de tiempo
1
Cambio de scope. Pedir un permiso nuevo invalida todos los access tokens que ya emitiste.
2
Revocación por LinkedIn. LinkedIn se reserva el derecho de revocar un token por motivos técnicos o de política.
3
Revocación por el miembro. El miembro desconecta tu app desde su configuración de LinkedIn.
4
Intento de refresh muerto. Un refresh con un token inválido, caducado o revocado devuelve un error 400, sin segundo intento.
Cualquiera de estos casos puede acabar con un token de LinkedIn días antes de su vida documentada de 60 días.

¿En qué se diferencia del token de 60 días de Meta?

Las dos plataformas dicen 60 días. Casi nada más encaja.

LinkedInMeta
Vida documentada del token de usuario60 días"about 60 days"
expires_in devuelto51840005183944
Mecanismo de renovaciónReautenticación, o grant_type=refresh_token para partners MDPgrant_type=fb_exchange_token
Renovar con un token caducadoNoNo
Opción sin caducidadNinguna documentadaPage access token

El número de Meta es el raro. Su respuesta de ejemplo devuelve "expires_in": 5183944, que son 56 segundos menos de 60 días, y la redacción de Meta es deliberadamente laxa: "long-lived tokens last about 60 days." Meta añade después una advertencia que LinkedIn no hace, diciéndote que no dependas de la duración porque los tokens "may change without warning or expire early." El desglose completo está en la nota sobre el token de acceso de larga duración de Facebook.

La divergencia real está en lo que consigues al final de la cadena. Meta te deja derivar un Page access token a partir de un token de usuario de larga duración, y dice que esos "do not have an expiration date." LinkedIn no publica nada equivalente y afirma lo contrario en una sola línea de la sección de renovación: "To protect members' data, LinkedIn does not generate long-lived access tokens." LinkedIn está describiendo su propio token de 60 días como de corta duración.

Para quien construya contra las dos, la forma práctica es esta. En Meta puedes alcanzar una credencial que sobrevive a la sesión del miembro. En LinkedIn no, así que el aviso de reconexión es una característica permanente de la integración y no un estado de fallo, y programar publicaciones en LinkedIn de forma fiable significa planificar el día en que el miembro tenga que volver a pulsar Allow.

Preguntas frecuentes

¿Qué valor devuelve expires_in para un token de acceso de LinkedIn?

5184000 en el ejemplo publicado por LinkedIn, que son exactamente 60 días en segundos.

AdaptlyPost
AdaptlyPost

Prueba gratis de 7 días

Analíticas multiplataforma

Bandeja Social

Asistente con IA

¿Puedes alargar un token de acceso de LinkedIn más allá de 60 días?

No. LinkedIn emite un token nuevo de 60 días, o bien mediante un refresh token si tu app es partner MDP aprobado, o bien pasando otra vez al miembro por la autorización.

¿Cuánto vale un código de autorización de LinkedIn?

30 minutos. LinkedIn escribe que "must be used immediately" y que un código caducado obliga a repetir todos los pasos anteriores.

¿Renovar reinicia la caducidad del refresh token?

No. LinkedIn afirma que el TTL del refresh token "remains the same as specified in the initial OAuth flow (365 days)" por muchas veces que lo uses.

¿Por qué dejaron de funcionar todos tus tokens de LinkedIn a la vez?

La causa más probable es un cambio de scope. LinkedIn invalida todos los tokens de acceso concedidos antes cuando tu app pide un scope distinto del ya concedido.

¿Cómo compruebas si un token está revocado o caducado?

Llama a POST https://www.linkedin.com/oauth/v2/introspectToken con tus credenciales de cliente y el token. El campo status devuelve revoked, expired o active.

¿Qué pasa cuando el refresh token de LinkedIn caduca junto con el access token?

El propio ejemplo de LinkedIn sitúa esto en el día 360, cuando al access token y al refresh token les quedan cinco días. En cuanto se cierra esa ventana, el miembro tiene que pasar de nuevo por la autorización, porque ningún grant type puede renovar un refresh token ya caducado. La página de refresh tokens no documenta ninguna vía de extensión para el propio refresh token.

¿Por qué la mayoría de las herramientas de publicación no pueden depender del token de dos piernas de LinkedIn?

El token de client credentials dura solo 30 minutos y LinkedIn lo documenta como no disponible para las Marketing APIs, justo la superficie de la que dependen las herramientas de programación y publicación. Su respuesta de ejemplo devuelve expires_in como una cadena entre comillas, "1800", en vez del entero que usa el flujo de tres piernas. Cualquier app que publique en nombre de un miembro tiene que usar el flujo de tres piernas en su lugar.

¿La cifra de 5.184.000 segundos de LinkedIn cuadra con su afirmación de 60 días?

Cuadra de forma exacta. La documentación de LinkedIn indica una vida de 60 días y el valor de ejemplo de expires_in, 5184000 segundos, equivale sin redondeo a exactamente 60 días. Esa precisión hace que resalte todavía más el desajuste entre minutos y segundos que aparece después en el campo refresh_token_expires_in de la misma documentación.

¿LinkedIn llega a emitir un token que nunca caduca?

LinkedIn no documenta ninguna opción así. Todo access token tiene una vida de 60 días y la propia empresa afirma que no genera access tokens de larga duración, a diferencia de Meta, que permite derivar un Page access token sin fecha de caducidad a partir de un token de usuario de larga duración.

¿Te resultó útil este artículo?

¡Cuéntanos qué te parece!

Vernos más en Google

Un clic marca AdaptlyPost como fuente preferida y nuestros artículos aparecen más arriba en tus Noticias destacadas, el modo IA y los resúmenes con IA.

Antes de irte...

AdaptlyPost

AdaptlyPost

Programa tu contenido en todas las plataformas

Gestiona todas tus cuentas de redes sociales en un solo lugar con AdaptlyPost.

Analíticas multiplataforma

Bandeja Social

Asistente con IA

Términos relacionados del glosario

Artículos Relacionados