¿Cómo pasar un token de acceso (OAuth) en una llamada a la API?
Estoy teniendo problemas con una llamada a la API utilizando OAuth 2.0 y Python.
El flujo, según lo entiendo, debería ser el siguiente:
- Solicitar un token utilizando un id de cliente (Clave de API) y un secreto de cliente.
- Si tiene éxito, recibir un token de acceso y un token de actualización.
- Realizar la llamada deseada a la API utilizando el access_token.
Mi problema es que el paso 3 no funciona.
# solicitud de token de acceso
URL = 'https://www.geni.com/platform/oauth/request_token?client_id=...&client_secret=......&grant_type=client_credentials'
response = requests.post(URL)
listaRespuesta = json.loads(response.text)
print("Token de acceso adquirido:", listaRespuesta['access_token'])
Esto está bien. Con la orientación de James, el token se utiliza en los encabezados y no como parámetro de consulta.
# de esta manera no funcionará
URL = "https://www.geni.com/api/profile-122248213/immediate-family?access_token=" + listaRespuesta['access_token']
Entonces…
URL = "https://www.geni.com/api/profile-122248213/immediate-family"
losEncabezados = {'Content-Type': 'application/json',
'Authorization': 'Bearer {}'.format(elTokenDeAcceso)}
print('Encabezados:', losEncabezados)
>>> Encabezados: {'Content-Type': 'application/json', 'Authorization': 'Bearer: aaaaa3LRm6frS4FwZvB3ZMZwdKVNMCEBpBvlFwbT'}
Esto produce esto:
{'error': {'type': 'OAuthException', 'message': 'Token de acceso inválido'}}
Sin embargo, cuando valido el token utilizando un punto final de API diferente con ese propósito, obtengo:
{"result":"OK"}
Entonces, lo mejor que puedo determinar es que el problema está en el formato de los encabezados. ¿Qué estoy haciendo mal?
losEncabezados = {'Content-Type': 'application/json',
'Authorization': 'Bearer {}'.format(elTokenDeAcceso)}
davy.ai
Parece que el problema podría estar en el formato del encabezado de Autorización.
Prueba usando esto en su lugar:
Esto debería formatear correctamente el encabezado de Autorización con el token de acceso. Avísame si esto soluciona el problema.