INVALID_LOGIN oplossen in Salesforce-deployments

De inloggegevens of sessie die een CI-pipeline gebruikt om te authenticeren bij Salesforce werden geweigerd voordat de deployment kon beginnen.

Treedt op bij: authenticatie, voordat er enige deploy- of DML-logica draait

Wat het betekent

INVALID_LOGIN is een authenticatiefout, geen metadatafout: Salesforce weigerde de inlogpoging zelf, waardoor er geen enkele deploymentlogica werd uitgevoerd. In een CI/CD-context betekent dit vrijwel altijd een verlopen sessie, een ingetrokken connected app, of een IP-restrictie die het inlogverzoek van de pipeline blokkeert.

Omdat authenticatie plaatsvindt vóór al het andere, vertelt deze fout niets over de inhoud van de deployment, een package die nooit een echte deploy heeft laten mislukken kan nog steeds INVALID_LOGIN veroorzaken als de inloggegevens naar de org ongeldig zijn.

Diagnose

Veelvoorkomende oorzaken

Verlopen of ingetrokken OAuth-token of -sessie
Een refresh-token, connected-app-autorisatie of opgeslagen sessie die door de pipeline wordt gebruikt, is verlopen of handmatig ingetrokken in de doel-org.
IP-restricties blokkeren de CI-runner
De inlog-IP-bereiken van de org of de IP-restricties van de connected app bevatten niet het huidige IP-adres van de CI/CD-runner.
Wachtwoord of beveiligingstoken gewijzigd
Het wachtwoord of beveiligingstoken van de integratiegebruiker is gereset, maar de opgeslagen inloggegevens van de CI-pipeline zijn niet bijgewerkt om overeen te komen.

De oplossing

  1. Authenticeer opnieuw en vernieuw de opgeslagen inloggegevens
    Maak de OAuth-autorisatie van de CI-pipeline opnieuw, of genereer een nieuwe sessie voor de integratiegebruiker.
    sf org login jwt --client-id $CONSUMER_KEY --jwt-key-file server.key --username [email protected] --instance-url https://login.salesforce.com
  2. Voeg het IP-bereik van de CI-runner toe aan vertrouwde IP's
    Werk de netwerktoegangsinstellingen van de org bij, of het IP-versoepelingsbeleid van de connected app, om het IP-bereik van de pipeline toe te staan.
  3. Roteer inloggegevens in de pipeline dezelfde dag dat ze in Salesforce wijzigen
    Werk de CI-secretopslag onmiddellijk bij wanneer het wachtwoord, token of de connected app van de integratiegebruiker wordt gewijzigd.
In de praktijk

Hoe Serpent dit voorkomt

Serpent beheert orgverbindingen en herauthenticatie voor zijn eigen pipelines, zodat een verlopen sessie zich meldt als een duidelijke verbind-opnieuw-melding op de org in plaats van een cryptische inlogfout die verborgen zit in CI-logs. Zie de bibliotheek met Salesforce-deploymentfouten.

Org- en Git-verbindingsinstellingen in Serpent

Preventie

Gebruik JWT bearer flow in plaats van een opgeslagen gebruikersnaam en wachtwoord
Authenticeer CI met de certificaatgebaseerde JWT bearer flow van een connected app, die niet verloopt zoals een sessietoken of hardgecodeerd wachtwoord dat wel doet.
Stel de IP-versoepeling van de connected app in om bekende automatisering toe te staan
Configureer IP-versoepeling passend voor de connected app die door CI wordt gebruikt, in plaats van IP-restricties te bestrijden met een hardgecodeerde, roterende allowlist.
Waarschuw bij het roteren van inloggegevens, niet alleen bij pipelinefouten
Koppel wachtwoord- of beveiligingstoken-resets in Salesforce aan een melding die het team eraan herinnert om CI-secrets dezelfde dag bij te werken, voordat de volgende geplande run mislukt.
Veelgestelde vragen

INVALID_LOGIN, uitgelegd

Waarom treedt INVALID_LOGIN alleen op in CI, en niet wanneer ik handmatig inlog?
Handmatige logins doorlopen de volledige browser-MFA- en sessieflow, terwijl CI-pipelines authenticeren met een opgeslagen token of sessie die stilletjes kan verlopen, worden ingetrokken, of buiten een IP-restrictie kan vallen zonder dat iemand het merkt tot de volgende geautomatiseerde run.
Breekt het inschakelen van MFA voor de integratiegebruiker de CI-logins?
Dat kan, als de pipeline gebruikersnaam-wachtwoordauthenticatie gebruikt, aangezien MFA-uitdagingen niet scriptbaar zijn. JWT bearer flow en certificaatgebaseerde authenticatie vermijden dit volledig omdat ze niet door het interactieve inlogscherm gaan.
Vertelt deze fout mij specifiek of het om een probleem met inloggegevens of IP gaat?
Niet altijd precies. De berichttekst geeft vaak een hint, maar controleer bij twijfel eerst de inloggeschiedenis van de connected app en de IP-restrictie-instellingen van de org, aangezien beide snel zijn uit te sluiten.

Start gratis. Geen creditcard, geen installatie, geen verplichting.

Binnen 15 minuten ingericht. Geen DevOps-aanwerving nodig.

Benieuwd naar sneller releasen voordat je instapt? Laten we praten

Vrijblijvend.