Authentification automatique sur Fortnox avec 2FA

Fortnox propose diverses stratégies pour la 2FA, y compris l’utilisation de codes SMS à chaque connexion.

L’utilisation d’un utilisateur, d’un mot de passe et d’un SMS pour la 2FA dans des environnements « lights-out » avec Data Hub n’est, par conception, pas réalisable. Il n’y a aucun humain présent pour lire et saisir un code SMS.

Les options suivantes sont disponibles :

  • jeton d’actualisation (refresh token) ;
  • via Invantive Cloud sur OData (lecture seule) ;
  • via Invantive Cloud sur UniversalSQL Server (lecture et écriture).

Jeton d’actualisation obtenu via la pré-authentification Invantive Cloud

La première option qui vient à l’esprit est d’utiliser la pré-authentification sur Invantive Cloud pour obtenir un jeton d’actualisation (refresh token) permettant d’acquérir ultérieurement, en local (on-premises), les fameux « jetons d’accès » (access tokens). Ce jeton d’actualisation peut être inclus dans les paramètres de la base de données comme suit :

  • Allez sur Invantive Cloud.
  • Allez dans le menu Setup.
  • Allez dans Pre-authenticate.
  • Allez dans Pre-authenticate for on-premises use.
  • Choisissez Fortnox.
  • Indiquez les informations du client comme illustré (indiquez votre propre identifiant client, secret client et URI de redirection) :
  • Choisissez « Get Authorization Code ».
  • Connectez-vous à Fortnox.
  • Choisissez l’entreprise.
  • Copiez l’URL complète obtenue dans votre presse-papiers.
  • Collez l’URL dans la fenêtre de Pre-authenticatie toujours ouverte :
  • Choisissez « Complete Preauthentication ».
  • La page suivante affiche, dans divers formats, les informations d’un conteneur de données basé sur Fortnox utilisant un jeton d’actualisation au lieu d’un nom d’utilisateur et d’un mot de passe :
  • Intégrez ces informations dans votre base de données via settings*.xml

Il n’est pas certain que ce jeton reste actif même lorsqu’il est utilisé de manière constante après 45 jours. Vos retours sont les bienvenus !

Via Invantive Cloud en utilisant OData (lecture seule)

Comme alternative, enregistrez une base de données Fortnox sur Invantive Cloud :

Assurez-vous que l’adresse IP externe du serveur Data Hub est sur liste blanche dans la base de données, dans le champ « Bridge Client IP Address List », ou utilisez « * » comme indiqué sur l’image.

Testez les paramètres à l’aide du pilote Invantive Bridge Online dans le groupe Various, comme illustré :

Par exemple, en utilisant la requête Bridge Online :

select *
from   [Accounts@fnx]

Utilisez ensuite le segment d’URL Bridge avec le pilote Invantive Bridge Online dans un nouveau conteneur de données dans votre fichier settings*.xml, comme suit :

  <database
   order="30"
   alias="fortnox"
   provider="InvantiveBridgeOnline"
   userLogonCodeMode="Hidden"
   passwordMode="Hidden"
   defaultUserLogonCode="john.doe@acme.eu"
   defaultPassword="secret"
   connectionString="server=https://bridge-online.invantive.com;database=acme-fortnox"
  />

Remplacez les valeurs defaultUserLogonCode et defaultPassword par un utilisateur et un mot de passe Invantive Cloud.

Le protocole OData permet uniquement de lire les données.

Via Invantive Cloud en utilisant SQL Server (BÊTA depuis octobre 2025) pour la lecture et l’écriture

Comme alternative, vous pouvez enregistrer une base de données Fortnox sur Invantive Cloud :

Assurez-vous que l’adresse IP externe du serveur Data Hub est sur liste blanche dans la base de données, dans le champ « Bridge Client IP Address List », ou utilisez « * » comme indiqué sur l’image.

Utilisez ensuite le nom d’hôte fourni par Invantive UniversalSQL Server en tant que « SQL Server-compatible Server Name (BETA) » dans un nouveau conteneur de données dans votre fichier settings*.xml, comme suit :

  <database
   order="30"
   alias="fortnox"
   provider="SqlServer"
   userLogonCodeMode="Hidden"
   passwordMode="Hidden"
   connectionString="Data Source=acme-fortnox.database.invantive.com;UID=john.doe@acme.com;PWD=secret"
   AllowConnectionStringRewrite="false"
  />

Remplacez les valeurs UID et PWD par un utilisateur et un mot de passe Invantive Cloud.

Le protocole Invantive UniversalSQL Server permet à la fois la lecture et l’écriture, mais peut nécessiter de renommer certains noms d’objets, étant donné que les quatre niveaux d’un nom sur Invantive UniversalSQL doivent parfois être mappés sur le modèle de nommage à trois niveaux de Microsoft SQL Server.

Exemple

L’exemple suivant montre les trois approches combinées dans une seule base de données avec trois conteneurs de données dans l’écran de connexion :

La requête utilisée est :

select 'OData'
,      *
from   Accounts@fnx_uss
where  number = 1010
union all
select 'UniversalSQL Server'
,      *
from   [Accounts@fnx]@fnx_odata
where  number = 1010
union all
select 'Local'
,      *
from   Accounts@fnx_local
where  number = 1010

avec trois résultats identiques :

Veuillez noter que le jeton d’actualisation n’est utilisé qu’à partir de la deuxième connexion.

Avenir

Dans une future version, Invantive pourrait proposer l’acquisition de jetons depuis Invantive Cloud, tandis que l’ensemble des échanges de données continuerait à se dérouler sur le client exécutant les outils on-premises.

Un message a été scindé en un nouveau sujet : Display more data container context