Fortnoxでの2FAを使用した自動認証

Fortnoxには2FA(二要素認証)のための様々な戦略があり、その一つにログインのたびにSMSコードを使用する方法があります。

Data Hubを使用する無人環境(lights-out environments)では、2FAにユーザー名、パスワード、SMSを使用することは設計上不可能です。SMSコードを読み取って入力する人間がその場にいないためです。

以下のオプションが利用可能です:

  • リフレッシュトークン(refresh token);
  • Invantive Cloud経由でODataを使用(読み取り専用);
  • Invantive Cloud経由でUniversalSQL Serverを使用(読み書き両方)。

Invantive Cloud事前認証で取得したリフレッシュトークン

最初に思いつくオプションは、Invantive Cloudで事前認証を使用して、いわゆる「アクセストークン」をオンプレミスで後から取得するためのリフレッシュトークンを取得することです。このリフレッシュトークンは、以下のようにデータベース設定に含めることができます:

  • Invantive Cloudにアクセスします。
  • Setupメニューに移動します。
  • Pre-authenticateに移動します。
  • Pre-authenticate for on-premises useに移動します。
  • Fortnoxを選択します。
  • 表示されているようにクライアント情報を指定します(ご自身のクライアントID、クライアントシークレット、リダイレクトURIを入力してください):
  • 「Get Authorization Code」を選択します。
  • Fortnoxにログオンします。
  • 会社を選択します。
  • 結果として表示されるURL全体をクリップボードにコピーします。
  • まだ開いているPre-authenticatieウィンドウにURLを貼り付けます:
  • 「Complete Preauthentication」を選択します。
  • 次のページには、ユーザー名とパスワードの代わりにリフレッシュトークンを使用したFortnoxベースのデータコンテナの情報が様々な形式で表示されます:
  • これらをsettings*.xmlを使用してデータベースに含めます

45日経過後も継続的に使用されている場合、このトークンが引き続き有効であるかどうかは不明です。フィードバックをお待ちしております!

Invantive Cloud経由でODataを使用(読み取り専用)

代替案として、Invantive CloudにFortnoxデータベースを登録します:

Data Hubサーバーの外部IPアドレスが、データベースの「Bridge Client IP Address List」フィールドでホワイトリストに登録されていることを確認するか、画像に示すように「*」を使用してください。

図のグループ「Various」にあるInvantive Bridge Onlineドライバーを使用して設定をテストします:

例えば、Bridge Onlineクエリを使用します:

select *
from   [Accounts@fnx]

次に、データベースsettings*.xml内の新しいデータコンテナで、Invantive Bridge OnlineドライバーとBridge URLセグメントを使用します。例えば:

  <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"
  />

defaultUserLogonCodeとdefaultPasswordの値を、Invantive Cloudのユーザーとパスワードに置き換えてください。

ODataプロトコルは、データの読み取りのみを許可します。

Invantive Cloud経由でSQL Serverを使用(2025年10月時点でBETA)して読み書き

代替案として、Invantive CloudにFortnoxデータベースを登録できます:

Data Hubサーバーの外部IPアドレスが、データベースの「Bridge Client IP Address List」フィールドでホワイトリストに登録されていることを確認するか、画像に示すように「*」を使用してください。

次に、Invantive UniversalSQL Serverが提供するホスト名を、データベースsettings*.xml内の新しいデータコンテナで「SQL Server-compatible Server Name(BETA)」として使用します。例えば:

  <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"
  />

UIDとPWDの値を、Invantive Cloudのユーザーとパスワードに置き換えてください。

Invantive UniversalSQL Serverプロトコルは読み取りと書き込みの両方を許可しますが、Invantive UniversalSQL上の名前の4つのレベル全てを、Microsoft SQL Serverの3レベルの命名モデルにマッピングする必要がある場合があるため、オブジェクト名の一部のリネームが必要になることがあります。

サンプル

以下のサンプルは、ログイン画面で3つのデータコンテナを持つ1つのデータベースに、3つのアプローチ全てを組み合わせたものを示しています:

使用されるクエリは次の通りです:

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

3つの結果は同一です:

なお、リフレッシュトークンは2回目以降のログインからのみ使用される点にご注意ください。

将来

将来のリリースでは、Invantiveはすべてのデータ交換がオンプレミスツールを実行しているクライアント上で引き続き行われる一方で、Invantive Cloudからのトークン取得を提供する可能性があります。

メッセージが新しいトピックに分割されました: Display more data container context