Last active
November 24, 2025 20:45
-
-
Save erseco/23aa0c79d23b7c59587b19f2f890586e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env python3 | |
| """ | |
| CAS Login | |
| Este script realiza el proceso de inicio de sesión CAS para la URLs proporcionadas y devuelve un objeto requests.Session con la sesión iniciada | |
| Fecha: 13-13-2023 | |
| """ | |
| import requests | |
| import re | |
| def cas_login(target_url, username, password): | |
| """ | |
| Realiza el proceso de inicio de sesión CAS para la URL proporcionada y devuelve un objeto requests.Session con la sesión iniciada. | |
| Parámetros: | |
| cas_hostname: El hostname del servidor CAS. | |
| target_url: La URL del recurso que se desea acceder después del login. | |
| username: Nombre de usuario para el login. | |
| password: Contraseña para el login. | |
| """ | |
| cas_hostname = "server.com" | |
| session = requests.Session() | |
| cas_login_url = f"https://{cas_hostname}/cas/login?service={target_url}" | |
| response = session.get(cas_login_url) | |
| # Extrae el ticket de CAS | |
| cas_id = re.search(r'name="execution" value="([^"]*)"', response.text) | |
| if not cas_id: | |
| raise Exception("No se pudo obtener el ticket de CAS.") | |
| cas_id = cas_id.group(1) | |
| data = { | |
| "username": username, | |
| "password": password, | |
| "execution": cas_id, | |
| "_eventId": "submit" | |
| } | |
| # Realiza el POST para el login | |
| response = session.post(cas_login_url, data=data, allow_redirects=False) | |
| if response.status_code != 302: | |
| raise Exception("Error en el login. Revisa las credenciales y la URL.") | |
| # Redirige a la URL después del login | |
| session.get(response.headers.get('Location'), allow_redirects=False) | |
| return session | |
| # Ejemplo de cómo se usaría la función | |
| if __name__ == "__main__": | |
| target_url = "https://www.example.org/" | |
| username = "USERNAME" | |
| password = "CHANGE_ME" | |
| session = cas_login(target_url, username, password) | |
| # Ahora puedes usar 'session' para realizar otras solicitudes autenticadas | |
| # Por ejemplo: response = session.get(otra_url) | |
| response = session.get(target_url) | |
| print(response.text) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment