Saltar al contenido principal

Autenticación App only y OAuth 2.0 Bearer Token

X ofrece a las aplicaciones la capacidad de emitir solicitudes autenticadas en nombre de la propia aplicación, en lugar de hacerlo en nombre de un usuario específico. La implementación de X se basa en el flujo Client Credentials Grant de la especificación OAuth 2. La autenticación App only no incluye ningún contexto de usuario y es una forma de autenticación en la que una aplicación realiza solicitudes a la API en su propio nombre. Este método es para desarrolladores que solo necesitan acceso de solo lectura a información pública. Puedes realizar autenticación App only usando las consumer API keys de tu App, o utilizando un App only Access Token (Bearer Token). Esto significa que las únicas solicitudes que puedes hacer a la X API no deben requerir un usuario autenticado. Con la autenticación App only, puedes realizar acciones como:
  • Obtener cronologías de usuarios
  • Acceder a amigos y seguidores de cualquier cuenta
  • Acceder a recursos de List
  • Buscar Tweets
Ten en cuenta que solo OAuth 1.0a o el Authorization Code Flow de OAuth 2.0 con PKCE se requiere para emitir solicitudes en nombre de usuarios. La página de API reference describe el método de autenticación requerido para usar una API. Necesitarás autenticación de usuario y contexto de usuario, con un access token para realizar lo siguiente:
  • Publicar Tweets u otros recursos
  • Buscar usuarios
  • Usar cualquier endpoint de geolocalización
  • Acceder a Mensajes Directos o credenciales de la cuenta
  • Recuperar direcciones de correo electrónico del usuario

Flujo de autenticación

Para usar este método, debes utilizar un App only Access Token (también conocido como Bearer Token). Puedes generar un App only Access Token (Bearer Token) enviando tu consumer key y secret al endpoint POST oauth2/token. El flujo de autenticación App only sigue estos pasos:
  • Una aplicación codifica su consumer key y secret en un conjunto de credenciales especialmente codificadas.
  • Una aplicación realiza una solicitud al endpoint POST oauth2/token para intercambiar estas credenciales por un App only Access Token.
  • Al acceder a la REST API, la aplicación utiliza el App only Access Token para autenticarse.
Como no es necesario firmar la solicitud, este enfoque es mucho más sencillo que el modelo estándar OAuth 1.0a.

Acerca de la autenticación App only

Los tokens son contraseñas Tenga en cuenta que la consumer key y el secret, así como el App only Access Token (Bearer Token) en sí, conceden acceso para realizar solicitudes en nombre de una aplicación. Estos valores deben considerarse tan sensibles como las contraseñas y no deben compartirse ni distribuirse a terceros no confiables. Se requiere SSL Todas las solicitudes (tanto para obtener como para usar los tokens) deben usar endpoints HTTPS. Siga las prácticas recomendadas detalladas en Connecting to X API using TLS: los pares siempre deben verificarse. Sin contexto de usuario Al realizar solicitudes usando autenticación App only, no existe el concepto de “usuario actual”. Por lo tanto, endpoints como POST statuses/update no funcionarán con autenticación App only. Consulte using OAuth para obtener más información sobre cómo realizar solicitudes en nombre de un usuario. Límites de tasa Las aplicaciones tienen dos tipos de grupos de límites de tasa. Las solicitudes realizadas en nombre de usuarios con access tokens, también conocido como contexto de usuario, se descuentan de un contexto de límites de tasa diferente al utilizado en la autenticación App only. En otras palabras, las solicitudes realizadas en nombre de usuarios no se descontarán de los límites de tasa disponibles mediante autenticación App only, y las solicitudes realizadas mediante autenticación App only no se descontarán de los límites de tasa usados en la autenticación basada en usuario. Lea más sobre API Rate Limiting y revise los límites.

Emisión de solicitudes App only

Paso 1: Codificar la consumer key y la consumer secret Los pasos para codificar la consumer key y la consumer secret de una aplicación en un conjunto de credenciales para obtener un Bearer Token son:
  1. Codifique la consumer key y la consumer secret según RFC 1738. Tenga en cuenta que, al momento de redactar esto, esto no cambiará realmente la consumer key ni la consumer secret, pero este paso debe realizarse por si el formato de esos valores cambia en el futuro.
  2. Concatene la consumer key codificada, un carácter de dos puntos ”:” y la consumer secret codificada en una sola cadena.
  3. Codifique en Base64 la cadena del paso anterior.
A continuación se muestran valores de ejemplo con el resultado de este algoritmo. Tenga en cuenta que la consumer secret utilizada en esta página es solo para fines de prueba y no funcionará para solicitudes reales.
Consumer keyxvz1evFS4wEEPTGEFPHBog
Consumer secretL8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
RFC 1738 encoded consumer

key (does not change)
xvz1evFS4wEEPTGEFPHBog
RFC 1738 encoded consumer

secret (does not change)
L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
Bearer Token credentialsxvz1evFS4wEEPTGEFPHBog:L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
Base64 encoded Bearer Token credentials:: eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==
Paso 2: Obtener un App only Access Token (Bearer Token) El valor calculado en el paso 1 debe intercambiarse por un App only Access Token mediante una solicitud a POST oauth2/token:
  • La solicitud debe ser una solicitud HTTP POST.
  • La solicitud debe incluir un encabezado Authorization con el valor Basic <base64 encoded value from step 1>.
  • La solicitud debe incluir un encabezado Content-Type con el valor application/x-www-form-urlencoded;charset=UTF-8.
  • El cuerpo de la solicitud debe ser grant_type=client_credentials.
Ejemplo de solicitud (el encabezado Authorization ha sido ajustado):
POST /oauth2/token HTTP/1.1
Host: api.x.com
User-Agent: My X App v1.0.23
Authorization: Basic eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJn
                     NmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Content-Length: 29
Accept-Encoding: gzip

grant\_type=client\_credentials
Si la solicitud está correctamente formateada, el servidor responderá con una carga útil codificada en JSON: Respuesta de ejemplo:
HTTP/1.1 200 OK
Status: 200 OK
Content-Type: application/json; charset=utf-8
...
Content-Encoding: gzip
Content-Length: 140

{"token\_type":"bearer","access\_token":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAAAAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}
Las aplicaciones deben verificar que el valor asociado con la clave token_type del objeto devuelto sea bearer. El valor asociado con la clave access_token es el App only Access Token (Bearer Token). Tenga en cuenta que un App only Access Token es válido para una aplicación a la vez. Enviar otra solicitud con las mismas credenciales a /oauth2/token devolverá el mismo token hasta que se invalide. Paso 3: Autenticar solicitudes a la API con el App only Access Token (Bearer Token) El App only Access Token (Bearer Token) puede usarse para enviar solicitudes a endpoints de la API que admiten autenticación solo de aplicación. Para usar el App Access Token, construya una solicitud HTTPS normal e incluya un encabezado Authorization con el valor Bearer <base64 bearer token value from step 2>. Signing is not required. Ejemplo de solicitud (el encabezado Authorization se ha ajustado):
GET /1.1/statuses/user\_timeline.json?count=100&screen\_name=twitterapi HTTP/1.1
Host: api.x.com
User-Agent: My X App v1.0.23
Authorization: Bearer AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAA
                      AAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Accept-Encoding: gzip
Invalidación de un App only Access Token (Bearer Token) Si un App only Access Token se ve comprometido o necesita invalidarse por cualquier motivo, realice una llamada a POST oauth2/invalidate_token. Ejemplo de solicitud (el encabezado Authorization se ha dividido en líneas):
POST /oauth2/invalidate_token HTTP/1.1
Authorization: Basic eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJn
                     NmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==
User-Agent: Mi X App v1.0.23
Host: api.x.com
Accept: */*
Content-Length: 119
Content-Type: application/x-www-form-urlencoded

access_token=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAAAAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Ejemplo de respuesta:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 127
...

{"access_token":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAAAAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}

Casos de error comunes

Esta sección describe algunos errores frecuentes en la negociación y el uso de Bearer Tokens. Tenga en cuenta que aquí no se incluyen todas las posibles respuestas de error; esté atento a códigos y respuestas no controlados. Solicitudes no válidas para obtener o revocar un App only Access Token Intentos de:
  • Obtener un App only Access Token (Bearer Token) con una solicitud no válida (por ejemplo, omitiendo grant_type=client_credentials).
  • Obtener o revocar un App only Access Token (Bearer Token) con credenciales de App incorrectas o vencidas.
  • Invalidar un App only Access Token (Bearer Token) incorrecto o ya revocado.
  • Obtener un App only Access Token (Bearer Token) con demasiada frecuencia en un período breve.
Darán como resultado:
HTTP/1.1 403 Forbidden
Content-Length: 105
Content-Type: application/json; charset=utf-8
...

{"errors":\[{"code":99,"label":"authenticity\_token\_error","message":"No se pueden verificar sus credenciales"}\]}

La solicitud a la API contiene un App only Access Token (Bearer Token) no válido

Usar un Access Token incorrecto o revocado para realizar solicitudes a la API tendrá como resultado:
HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=utf-8
Content-Length: 61
...

{"errors":\[{"message":"Token inválido o expirado","code":89}\]}

App only Access Token (Bearer Token) usado en un endpoint que no admite autenticación de solo App

Solicitar un endpoint que requiere contexto de usuario (como statuses/home_timeline) con un App only Access Token (Bearer Token) producirá:
HTTP/1.1 403 Forbidden
Content-Type: application/json; charset=utf-8
Content-Length: 91
...

{"errors":\[{"message":"Tus credenciales no permiten el acceso a este recurso","code":220}\]}
I