Itgenoda219 op Exact Online: Error "Old refresh token used." bij verbinden

In verband met toevoegen van een tweede accountancy abonnement bij Exact Online onder Data Replicator heb ik een extra app geregistreerd. Vervolgens heb ik via Invantive Cloud een pre-authenticatie gedaan. Echter, na het eerste succesvolle gebruik krijg ik elke volgende keer de foutmelding:

itgenoda219: Een verbinding met de database ‘groep\naam’ kon niet worden opgebouwd als gebruiker ‘’.
The data container with alias ‘eol’ could not be opened on provider ‘ExactOnlineAll’.
Uw sessie is verlopen.
Old refresh token used.
The remote server returned an error: (401) Unauthorized.

Hoe kan ik met dit refreshtoken me herhaaldelijk aanmelden op het tweede accountancy abonnement bij Exact Online?

Voer de volgende stappen uit om een “Old refresh token used” melding op te lossen:

  • Vraag of Invantive namens jullie een ontheffing wil aanvragen.
  • Vermeld hierbij client ID en Exact Online land.
  • De doorlooptijd is normaliter 1 werkdag.

Achtergrond

Onder andere Exact Online maakt gebruik van OAuth2 voor de authenticatie van gebruikers. OAuth2 werkt op basis van applicaties (“clients”) die toegang willen hebben tot data op een platform. Elke applicatie / client heeft zijn eigen instellingen. Een deel van de instellingen kan een applicatie-eigenaar instellen via het Exact Online Apps Center. Een deel van de instellingen kan alleen Exact Online zelf instellen.

De Invantive producten ondersteunen een aantal mechanismen voor OAuth2 authenticatie op Exact Online:

  • Implicit Grant Flow: voor gebruik op apparaten die niet onder controle van de applicatie-eigenaar staan. Geen client secret nodig, maar wel elke tien minuten opnieuw aanmelden en in geval van Exact Online helaas ook elke tien minuten opnieuw de TOTP-verificatiecode opnieuw aflezen en invullen.
  • Code Grant Flow: voor gebruik op apparaten die onder controle van de applicatie-eigenaar staan. Vereist een applicatiespecifiek geheim “client secret” plus een langer geldig wachtwoord, het “refresh token”. Met het client secret en het refresh token kan een kort geldig wachtwoord gegenereerd worden, het “acces token”.
  • Authorization Code Grant Flow: deze flow wordt niet op Exact Online aangeboden momenteel en komt alleen voor op andere ondersteunde platformen.
  • Client Credentials Flow: deze flow wordt niet op Exact Online aangeboden momenteel en komt alleen voor op andere ondersteunde platformen.

On-premise Producten

De grotere en intensievere gebruikers van Invantive SQL draaien vaak de Invantive producten op eigen apparatuur. De programmatuur draait vaak “unattnended”, bijvoorbeeld gedurende de nacht, bijvoorbeeld met Invantive Data Hub. Er is dan geen persoon aanwezig om de verificatiecode in te voeren of het wachtwoord.

Deze bedrijven moeten zelf een applicatie (client) registreren omdat de OAuth2 security guidelines het delen van de client secret tussen Invantive en deze gebruiker afraden (met goede reden). Het komt nog veel voor dat 3rd party apps het client secret delen met gebruikers, maar vanuit ons informatiebeveiligingsbeleid is dat niet acceptabel.

De registratie van een client gebeurt via het Exact Online App Center. We raden aan om het woord “Invantive” op te nemen in de clientnaam. De meestgebruikte redirect URL is https://clientredirect.invantive.com, maar een eigen redirect URL is ook mogelijk zolang het maar HTTPS is. Na opslaan van de client wordt de unieke ID van de applicatie getoond, de zogenaamde “client ID”. Ook komt het client secret beschikbaar.

Via pre-authenticatie op Invantive Cloud kan de inhoud van een settings*.xml bestand gegenereerd worden. Hierin zit een redirect URL, client secret en een refresh token. Het settings*.xml bestand bevat alle informatie die nodig is om gegevens op te halen uit Exact Online. Behandel het daarom met als een wachtwoord en zorg voor bijvoorbeeld fysieke serverbeveiliging en sterke wachtwoorden voor toegang.

De Invantive SQL engine onder Invantive Data Hub zal het refresh token en client secret omzetten in een access token. Dit token kan gedurende 10 minuten gebruikt worden en vervalt daarna. Dat is identiek aan de Implicit Grant Flow eerder genoemd. Met het refresh token en client secret kan weer een nieuw access token aangevraagd worden. Als onderdeel hiervan kan een nieuw refresh token teruggegeven worden. Echter, Exact stond ook het gebruik van alle voorgaande refresh tokens toe voor het genereren van het access token.

Echter, sinds enkele jaren heeft Exact een verandering doorgevoerd in haar implementatie van de Code Grant Flow. Bij het uitreiken van een nieuw access token en nieuw refresh token vervielen alle voorgaande refresh tokens qua geldigheid. Recentelijk is daar blijkbaar het criterium aan toegevoegd dat het access token ook 1x gebruikt moet zijn om gegevens op te halen.

Echter, als men met meerdere parallel lopende processen via de zelfde Exact Online gebruiker en client applicatie data wil ophalen, dan moeten tussentijds, doorlopend en 100% betrouwbaar deze aanmeldgegevens geactualiseerd worden.

Old refresh token

In de grotere enterprise opstellingen is dit niet voor een realistisch bedrag realiseerbaar, bijvoorbeeld door de benodigde beveiligingsmaatregelen om dergelijke gevoelige gegevens te transporteren. Maar ook omdat niet alle nodes of processen elkaar kennen of mogen kennen.

Om die reden is het mogelijk om bij Exact een ontheffing aan te vragen voor specifieke client ID’s. Deze ontheffing zorgt er voor dat de oude refresh tokens als voorheen bruikbaar blijven.

Om dit probleem op te lossen: vraag of Invantive namens jullie een ontheffing wil aanvragen.

Op dit moment loopt een discussie over het gebruik van de oude refresh tokens. Naar verwachting biedt het huidige algoritme voor het vervangen van access en refresh tokens te weinig mogelijkheden om dit risico op een veilige manier op te vangen. Een security-aanpak waarbij de security maar deels verbeterd wordt en daardoor elders concessies gedaan moeten worden aan de beveiliging wordt niet wenselijk geacht.

Meer informatie over de melding “Old refresh token used” is te vinden in Exact Online foutmelding: Old refresh token used.

Terzijde: TOTP-Verificatiecode bij Implicit Grant Flow

De Implicit Grant Flow wordt veel gebruikt in combinatie met Invantive Query Tool en Invantive Control for Excel.

Helaas wordt het beleidsmatig niet toegestaan om de TOTP-verificatiecode voor 30 dagen het zwijgen op te leggen zoals op de Exact Online site. Alhoewel er negatieve consequenties zijn voor het beveiligingsniveau zijn er wel een aantal workarounds zoals beschreven in:

Het aanvragen van een ontheffing is niet meer mogelijk. Helaas is de refresh token exchange bij de OAuth Code Grant Flow op Exact Online niet geheel vrij van fouten, die verergert worden doordat er maar 1 geldig en eventueel 1 toekomstig geldig refresh token kan zijn.

Ook al is het niet altijd even fraai, dan nog raden we voor on-premises gebruik uitsluitend het gebruik van de Implicit Grant Flow aan. Gebruikers ervaren die als bijzonder stabiel.

Op de Implicit Grant Flow ondersteunt Exact geen onthouden van de ingevoerde authenticatie met TOTP. Door het TOTP-secret vast te leggen kan het elke tien minuten invullen van de verificatiecode vermeden worden, ten laste van een mindere beveiliging. Instructies hiervoor zijn te vinden op:

Invantive Cloud kan ook last hebben van de Exact Online bugs. Het is mogelijk een automatisch herstel te configureren, zie Auto-recovery van Exact Online refresh tokens voor datacontainers.

Update TOTP/Exact Refresh Token november 2021

Het gebruik van Implicit Grant Flow met TOTP-secret is nog steeds aan te raden wanneer u niet kunt garanderen dat alle runs van Exact Online niet parallel lopen (op dezelfde machine of over meerdere servers heen) en bovendien minimaal 10 minuten uit elkaar liggen. Het interval van 10 minuten tussen de runs is nodig vanwege de nieuwe Exact Online eis dat een toegangstoken niet vaker dan eens in de 9,5 minuut mag worden verkregen. Het vaker dan eens in de 9,5 minuten verversen van het access token leidt momenteel tot het ongeldig worden van alle refresh tokens.

Om het aantal keren dat het TOTP-secret wordt gebruikt te verminderen, kunt u het client secret van uw Exact Online app opnemen in settings*.xml door het toe te wijzen aan het connection string attribuut api-client-secret.

Dit stelt - waar mogelijk - de Invantive software in staat om Code Grant Flow te gebruiken met verbeterde runtime prestaties. Wanneer meerdere processen tegelijkertijd worden uitgevoerd, zal de software automatisch terugkeren naar Implicit Grant Flow.

De data container instelling om automatisch verificatie code in te voeren bij programma start, over te schakelen naar Code Grant Flow en dan zo lang mogelijk gebruik te blijven maken van Code Grant Flow zal er als volgt uitzien:

      <database
       order="10"
       alias="eol"
       provider="ExactOnlineAll"
       userLogonCodeMode="Verborgen"
       passwordMode="Verborgen"
       defaultUserLogonCode="invantive1"
       standaardPaswoord="geheim"
       connectionString="api-url=https://start.exactonline.nl;api-client-id=GUID_VALUE;api-client-secret=ANOTHER_SECRET;api-redirect-url=https://URL;totp-secret=TOTP_SECRET"
       AllowConnectionStringRewrite="false"
      />