Gérer l'authentification et les sessions
Le défi de l’authentification
La majorité des workflows d’automatisation nécessitent d’être connecté à un service. Gérer l’authentification avec Computer Use demande des stratégies spécifiques car votre agent doit interagir avec des formulaires de connexion, des 2FA, des SSO et des sessions persistantes.
Connexion par formulaire
Le cas le plus simple : remplir un formulaire de connexion avec email et mot de passe.
task = """
Connecte-toi au site :
1. Clique sur le champ email et tape : [email protected]
2. Clique sur le champ mot de passe et tape : MonMotDePasse123
3. Clique sur le bouton "Se connecter"
4. Attends que le dashboard se charge
"""
Attention : ne codez jamais les identifiants dans vos prompts en production. Utilisez des variables d’environnement :
import os
credentials = {
"email": os.environ["APP_EMAIL"],
"password": os.environ["APP_PASSWORD"],
}
task = f"""
Connecte-toi au site avec :
- Email : {credentials['email']}
- Mot de passe : {credentials['password']}
"""
Réutiliser les cookies de session
Pour éviter de vous reconnecter à chaque exécution, sauvegardez et restaurez les cookies :
import json
def save_session(context, filepath="session.json"):
"""Sauvegarde les cookies de la session courante."""
cookies = context.cookies()
with open(filepath, "w") as f:
json.dump(cookies, f)
def restore_session(context, filepath="session.json"):
"""Restaure une session précédemment sauvegardée."""
try:
with open(filepath, "r") as f:
cookies = json.load(f)
context.add_cookies(cookies)
return True
except FileNotFoundError:
return False
Intégrez cela dans votre workflow :
def authenticated_workflow(task: str, login_url: str):
"""Workflow avec gestion automatique de la session."""
pw = sync_playwright().start()
browser = pw.chromium.launch(headless=True)
context = browser.new_context(
viewport={"width": 1280, "height": 720}
)
# Essayer de restaurer la session
if restore_session(context):
page = context.new_page()
page.goto(login_url)
# Vérifier si la session est encore valide
if is_logged_in(page):
print("Session restaurée avec succès")
run_agent(task, page=page)
save_session(context)
return
# Sinon, se connecter
page = context.new_page()
page.goto(login_url)
run_agent("Connecte-toi avec les identifiants fournis", page=page)
save_session(context)
# Puis exécuter la tâche
run_agent(task, page=page)
save_session(context) # Mettre à jour les cookies
Gérer l’authentification à deux facteurs (2FA)
La 2FA pose un défi car elle nécessite souvent une intervention humaine (code SMS, application authenticator). Plusieurs approches :
TOTP automatisé
Si vous utilisez une application TOTP (Google Authenticator, Authy), vous pouvez générer le code programmatiquement :
import pyotp
totp_secret = os.environ["TOTP_SECRET"]
totp = pyotp.TOTP(totp_secret)
code = totp.now()
task = f"""
Après la connexion, un champ de code 2FA apparaît.
Entre le code : {code}
Puis clique sur "Vérifier".
"""
Attente manuelle
Pour les 2FA non automatisables (SMS, push notification) :
def wait_for_2fa(page):
"""Pause l'agent et attend la validation manuelle."""
print("2FA requise. Validez manuellement, puis appuyez sur Entrée.")
input("Appuyez sur Entrée pour continuer...")
# L'agent reprend après la validation
Gérer les SSO (Single Sign-On)
Les connexions SSO (Google, Microsoft, SAML) redirigent vers un fournisseur d’identité externe. Votre agent doit suivre ces redirections :
task = """
Clique sur "Se connecter avec Google".
Tu seras redirigé vers la page de connexion Google.
1. Entre l'email dans le champ affiché
2. Clique sur "Suivant"
3. Entre le mot de passe
4. Clique sur "Suivant"
5. Si une vérification est demandée, attends
6. Tu seras redirigé vers l'application
"""
Détecter l’état de connexion
Créez une fonction qui vérifie si l’agent est connecté :
def is_logged_in(page) -> bool:
"""Vérifie si la session est active."""
# Vérification par URL
if "/login" in page.url or "/signin" in page.url:
return False
# Vérification par élément DOM
try:
page.wait_for_selector([data-testid=user-menu], timeout=3000)
return True
except:
return False
Sécurité des identifiants
"Ne stockez jamais de mots de passe dans votre code source, vos prompts ou vos logs."
Bonnes pratiques :
- Variables d’environnement pour les identifiants
- Fichiers
.envexclus du contrôle de version (.gitignore) - Gestionnaires de secrets en production (Vault, AWS Secrets Manager)
- Rotation régulière des mots de passe et tokens API
- Logs filtrés pour ne jamais enregistrer de données sensibles
Points clés à retenir
- Utilisez les cookies de session pour éviter de vous reconnecter à chaque exécution
- Le TOTP peut être automatisé si vous avez le secret partagé
- Les SSO nécessitent un suivi des redirections multi-domaines
- Ne stockez jamais d’identifiants dans le code ou les prompts — utilisez des variables d’environnement
- Vérifiez toujours l’état de connexion avant de lancer un workflow