Tengo esta API, algo como esto:
https://baseurl.com/endpointEs una API GET y tiene el mecanismo de autenticación y autorización OIDC + Auth2.0 de PingIdentity (habilitado en el nivel KONG API GATEWAY). La primera vez que accedo a esta API a través de mi navegador, me redirige a una página de inicio de sesión que, al iniciar sesión correctamente, activa esta API y me muestra el JSON de salida en el navegador. Durante la próxima hora, cada vez que vuelvo a presionar esta API, no vuelve a solicitar un inicio de sesión. Después de eso, nuevamente tengo que iniciar sesión una vez.
Ahora, necesito acceder a esta API a través de Python. El problema es que, en respuesta, da una salida HTML, que es básicamente la página de inicio de sesión a la que el navegador me estaba redirigiendo. Esto es lo que he probado:
Escribí esta API usando FastAPI en python, y cuando la solicité en el navegador, grabé sus encabezados en FastAPI a través de request.headers . Esto es lo que contenían los encabezados:
'host': 'keep-alive': 'connection': 'x-forwarded-for': 'x-forwarded-proto': 'x-forwarded-host': 'x-forwarded-port': 'x-forwarded-path': 'x-forwarded-prefix': 'x-real-ip': 'cache-control': 'sec-ch-ua': 'sec-ch-ua-mobile': 'sec-ch-ua-platform': 'upgrade-insecure-requests': 'user-agent': 'accept': 'sec-fetch-site': 'sec-fetch-mode': 'sec-fetch-user': 'sec-fetch-dest': 'referer': 'accept-encoding': 'accept-language': 'cookie': {contained my organization specific data, which I am sure are not essential} 'username': 'client_id': 'oidc-access-token': {it is a JWT token, which I have confirmed with my teammates, is the access token from PingIdentity}Sin embargo, cuando configuro estos mismos encabezados cuando uso la biblioteca de solicitudes de Python para acceder a esta misma API, nuevamente me devuelve el HTML de la página de inicio de sesión y no me da el resultado. También intenté copiar encabezados de la pestaña REDES en la herramienta Depurador en el navegador y configurar esos mismos parámetros en mis solicitudes en python, ¡pero nada funciona todavía! Así es como estoy accediendo a la API en python:
import requests hit_my_api = requests.get("https://baseurl.com/endpoint", headers={<The ones I mentioned above>})¿Cómo moverse con esto?
Debe agregar el token JWT en los encabezados como se muestra a continuación (ver aquí ):
hit_my_api = requests.get("https://baseurl.com/endpoint", headers={'Authorization': 'access_token myToken'})EDITAR: si lo anterior no funciona, intente esto:
hit_my_api = requests.get("https://baseurl.com/endpoint", headers={ 'Authorization': 'Bearer <your_token>' })