es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Petición de API de Python a API interna con autenticación OKTA.

Solía utilizar Selenium para descargar informes especiales de una página web donde tenía que iniciar sesión. La página web tiene un complemento de autenticación integrado de OKTA. Me di cuenta de que sería mejor y más efectivo utilizar solicitudes internas a través de la API. Así que intenté encontrar cómo usar la biblioteca de solicitudes de Python con la creación de una sesión, pero no tuve éxito. Intenté este código, pero termina con un error 400.

payload = {"password": "contraseña", "username": "nombredeusuario", "options": {"warnBeforePasswordExpired": True, "multiOptionalFactorEnroll": True}}

with requests.Session() as s:
    p = s.post('https://sso.johndeere.com/api/v1/authn', data=payload)

    r = s.get("url_solicitada")

    print(p)

No puedo pasar la autenticación. ¿Alguien tiene experiencia en romper el complemento de autenticación de OKTA utilizando la biblioteca de solicitudes?

Gracias.
Saludos.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no tengo experiencia personal, pero puedo sugerir algunas posibles soluciones para su problema.

    Parece que estás intentando autenticarte en un recurso protegido por Okta utilizando la API de Autenticación de Okta. Sin embargo, el código que proporcionaste no parece estar completo, ya que falta información crucial, como la URL de la organización de Okta y las cabeceras requeridas.

    Aquí tienes un ejemplo de cómo puedes autenticarte en Okta y acceder a un recurso protegido utilizando Python y la librería Requests:

    import requests
    from requests.auth import HTTPBasicAuth
    
    # Configura las credenciales de autenticación
    org_url = "https://tu-url-de-okta.com"
    api_token = "tu-api-token-de-okta"
    headers = {
        "Accept": "application/json",
        "Content-Type": "application/json",
        "Authorization": f"SSWS {api_token}"
    }
    
    # Autentícate utilizando la API de Autenticación de Okta
    authn_url = f"{org_url}/api/v1/authn"
    payload = {
        "username": "tu-nombre-de-usuario",
        "password": "tu-contraseña",
        "options": {
            "multiOptionalFactorEnroll": True,
            "warnBeforePasswordExpired": True
        }
    }
    response = requests.post(authn_url, json=payload, headers=headers)
    
    # Obtiene el token de sesión de la respuesta de la API de Autenticación
    if response.status_code == 200:
        session_token = response.json()["sessionToken"]
    else:
        raise ValueError("Error al autenticarse en Okta")
    
    # Utiliza el token de sesión para acceder al recurso protegido
    resource_url = "https://tu-recurso-protegido.com"
    headers["Authorization"] = f"SSWS {session_token}"
    response = requests.get(resource_url, headers=headers)
    
    # Imprime el contenido de la respuesta
    print(response.content)
    

    Este código primero configura las credenciales de autenticación necesarias, incluyendo la URL de la organización de Okta, el token de API y las cabeceras requeridas. Luego utiliza la API de Autenticación de Okta para autenticarse con el nombre de usuario y la contraseña proporcionados, y obtiene un token de sesión de la respuesta de la API.

    Finalmente, utiliza el token de sesión para autenticarse en un recurso protegido, utilizando las mismas cabeceras que antes pero con el token de sesión en lugar del token de API. Imprime el contenido de la respuesta del recurso.

    Es posible que debas modificar el código para adaptarlo a tus necesidades específicas y configuración de Okta, pero esto debería darte un buen punto de partida.

Comments are closed.