Comment corriger INVALID_LOGIN dans les déploiements Salesforce

Les identifiants ou la session qu'un pipeline CI utilise pour s'authentifier auprès de Salesforce ont été rejetés avant même que le déploiement ne puisse démarrer.

Se produit lors : de l'authentification, avant l'exécution de toute logique de déploiement ou DML

Ce que cela signifie

INVALID_LOGIN est une erreur d'authentification, pas une erreur de métadonnées : Salesforce a rejeté la tentative de connexion elle-même, si bien qu'aucune logique de déploiement n'a jamais été exécutée. Dans un contexte CI/CD, cela signifie presque toujours une session expirée, une application connectée révoquée, ou une restriction IP bloquant la requête de connexion du pipeline.

Comme l'authentification se produit avant tout le reste, cette erreur ne vous dit rien sur le contenu du déploiement, un package qui n'a jamais échoué à un déploiement réel peut quand même déclencher INVALID_LOGIN si les identifiants de connexion à l'org sont incorrects.

Diagnostic

Causes courantes

Jeton OAuth ou session expiré ou révoqué
Un jeton d'actualisation, une autorisation d'application connectée, ou une session stockée utilisée par le pipeline a expiré ou a été révoquée manuellement dans l'org cible.
Des restrictions IP bloquent le runner CI
Les plages IP de connexion de l'org ou les restrictions IP de l'application connectée n'incluent pas l'adresse IP actuelle du runner CI/CD.
Mot de passe ou jeton de sécurité modifié
Le mot de passe ou le jeton de sécurité de l'utilisateur d'intégration a été réinitialisé, mais les identifiants stockés du pipeline CI n'ont pas été mis à jour en conséquence.

La solution

  1. Se ré-authentifier et actualiser les identifiants stockés
    Reconnectez l'autorisation OAuth du pipeline CI ou générez une nouvelle session pour l'utilisateur d'intégration.
    sf org login jwt --client-id $CONSUMER_KEY --jwt-key-file server.key --username [email protected] --instance-url https://login.salesforce.com
  2. Ajouter la plage IP du runner CI aux IP de confiance
    Mettez à jour les paramètres d'accès réseau de l'org, ou la politique d'assouplissement IP de l'application connectée, pour autoriser la plage IP du pipeline.
  3. Faire tourner les identifiants du pipeline le jour même de leur changement dans Salesforce
    Mettez à jour le magasin de secrets CI immédiatement dès que le mot de passe, le jeton ou l'application connectée de l'utilisateur d'intégration change.
En pratique

Comment Serpent évite cela

Serpent gère les connexions à l'org et la ré-authentification pour ses propres pipelines, de sorte qu'une session expirée se manifeste par une invite de reconnexion claire sur l'org plutôt qu'un échec de connexion cryptique enfoui dans les logs CI. Consultez la bibliothèque des erreurs de déploiement Salesforce.

Paramètres de connexion Org et Git dans Serpent

Prévention

Utiliser le flux JWT bearer plutôt qu'un nom d'utilisateur et mot de passe stockés
Authentifiez CI avec le flux JWT bearer basé sur certificat d'une application connectée, qui n'expire pas comme le fait un jeton de session ou un mot de passe codé en dur.
Configurer l'assouplissement IP de l'application connectée pour l'automatisation connue
Configurez l'assouplissement IP de manière appropriée pour l'application connectée utilisée par CI, plutôt que de lutter contre les restrictions IP avec une liste blanche codée en dur et changeante.
Alerter lors de la rotation des identifiants, pas seulement en cas d'échec du pipeline
Reliez les réinitialisations de mot de passe ou de jeton de sécurité dans Salesforce à une notification qui rappelle à l'équipe de mettre à jour les secrets CI le jour même, avant que la prochaine exécution planifiée n'échoue.
Questions fréquentes

INVALID_LOGIN, expliqué

Pourquoi INVALID_LOGIN se produit-il uniquement en CI, et pas lorsque je me connecte manuellement ?
Les connexions manuelles passent par le flux complet de MFA et de session du navigateur, tandis que les pipelines CI s'authentifient avec un jeton ou une session stockés qui peuvent expirer silencieusement, être révoqués, ou sortir d'une restriction IP sans que personne ne le remarque jusqu'à la prochaine exécution automatisée.
L'activation de la MFA sur l'utilisateur d'intégration casse-t-elle les connexions CI ?
Cela peut arriver si le pipeline utilise une authentification par nom d'utilisateur et mot de passe, car les défis MFA ne sont pas scriptables. Le flux JWT bearer et l'authentification par certificat évitent totalement ce problème car ils ne passent pas par l'écran de connexion interactif.
Cette erreur m'indique-t-elle précisément s'il s'agit d'un problème d'identifiants ou d'IP ?
Pas toujours avec précision. Le texte du message donne souvent un indice, mais en cas de doute, vérifiez d'abord l'historique de connexion de l'application connectée et les paramètres de restriction IP de l'org, car les deux sont rapides à écarter.

Démarrez gratuitement. Sans carte bancaire, sans installation, sans engagement.

Configuration en moins de 15 minutes. Aucun recrutement DevOps nécessaire.

Curieux de livrer plus vite avant de vous lancer ? Parlons-en

Sans engagement.