Linux ブローカーでの MSAL ノードの使用

Microsoft Authentication Library (MSAL) ノードは、linux ブローカー用の Microsoft シングル サインオンを使用して、サポートされている Linux ディストリビューションでシングル サインオン (SSO) とセキュリティで保護されたトークン取得を提供できます。 ブローカーは認証ハンドシェイクとトークンのライフサイクルを管理し、ユーザーがシステムに認識されているアカウントとの統合を利用できるようにします。

この記事では、Linux ブローカーとは何か、サポートされているディストリビューション、および Node.js アプリでブローカー トークンの取得を有効にする方法について説明します。

すべてのプラットフォームでのブローカー サポートの概要については、 ネイティブ トークン ブローカーでの MSAL ノードの使用に関するページを参照してください。

Linux ブローカーとは

Microsoft シングル サインオン for Linux は、Linux ディストリビューションとは別に出荷される認証ブローカーです。 パッケージ マネージャー (sudo apt install microsoft-identity-broker または sudo dnf install microsoft-identity-broker) でインストールします。 また、ポータル サイトなどのMicrosoft アプリケーションの依存関係としてバンドルされています。

主な利点は次のとおりです。

  • シングルサインオン。 ユーザーがMicrosoft Entra IDで認証する方法を簡略化し、流出や誤用から更新トークンを保護します。
  • セキュリティの強化。 セキュリティの強化は、アプリ コードの変更を必要とせずに、ブローカーの更新プログラムを通じて提供されます。
  • トークン保護。 ブローカーは、更新トークンがデバイスにバインドされていることを確認します。
  • システム統合。 アプリケーションは組み込みのアカウント ピッカーに接続され、ユーザーは既存のアカウントをすばやく選択できます。

サポートされているディストリビューション

  • Ubuntu 22.04 / 24.04 (x64)
  • Red Hat Enterprise Linux (RHEL) 8 / 9 / 10 (x64)

Prerequisites

  • Node.js 18 以降
  • 依存関係として @azure/msal-node-extensions をインストールする
  • microsoft-identity-broker デバイスにインストールする必要があります
  • アプリの登録にブローカー リダイレクト URI を登録します (以下の リダイレクト URI を 参照してください)
  • 必要なシステム依存関係をインストールします (以下の 「システムの依存関係」 を参照)

リダイレクト URI

Linux ブローカー フローの場合は、Azure ポータルのモバイル およびデスクトップ アプリケーション プラットフォームに次のリダイレクト URI を登録します。

https://login.microsoftonline.com/common/oauth2/nativeclient

システムの依存関係

Ubuntu 22.04/24.04

sudo apt install libsecret-1-0 libdbus-1-3
  • libsecret — システム キーリング (GNOME Keyring または KDE ウォレット) を介して認証トークンを安全に格納および取得します。
  • dbus — 認証ブローカーとのプロセス間通信。 D-Bus セッション バスが実行されている必要があります (デスクトップ環境では標準。ヘッドレス サーバーには dbus-run-session またはそれと同等のものが必要な場合があります)。
sudo apt install libwebkit2gtk-4.1-0 libgtk-3-0
  • WebKitGTK — 対話型サインイン UI 用の埋め込みブラウザーを提供します。
  • GTK — WebKitGTK に必要な基になる UI ツールキット。

機能の有効化

Linux ブローカーを有効にすると、Windowsおよび macOS と同じ構成が使用されます。 ブローカー構成で NativeBrokerPlugin インスタンスを渡します。

import { PublicClientApplication, Configuration } from "@azure/msal-node";
import { NativeBrokerPlugin } from "@azure/msal-node-extensions";

const msalConfig: Configuration = {
    auth: {
        clientId: "your-client-id",
    },
    broker: {
        nativeBrokerPlugin: new NativeBrokerPlugin(),
    },
};

const pca = new PublicClientApplication(msalConfig);

Note

msal-node は、ブローカーが使用できない場合、ブラウザー ベースのフローにフォールバックしません。 予期しないエラーを回避するために、サポートされている Linux デバイスでのみブローカー認証を有効にします。

トークンの取得

対話型トークンの取得

acquireTokenInteractiveを使用して、Linux ブローカーを介してトークンを要求します。

const tokenRequest = {
    scopes: ["User.Read"],
};

const result = await pca.acquireTokenInteractive(tokenRequest);
console.log("Access token:", result.accessToken);

サイレント トークンの取得

最初の対話型サインインの後、後続のトークン要求をサイレントモードで行うことができます。

const accounts = await pca.getAllAccounts();

if (accounts.length > 0) {
    const silentRequest = {
        scopes: ["User.Read"],
        account: accounts[0],
    };

    const result = await pca.acquireTokenSilent(silentRequest);
    console.log("Access token (silent):", result.accessToken);
}

トークンのキャッシュ

認証ブローカーは、更新とアクセス トークンのキャッシュを処理します。 ブローカーを介して取得されたトークンは、ブローカー自体によって管理され、デバイスバインドされます。 ブローカーを使用するときにカスタム キャッシュを設定する必要はありません。

Linux ブローカーを使用する場合の違い

  • ブローカーが対話を求める必要がある場合は、ネイティブ サインイン ダイアログ (WebKitGTK ベース) が表示されます。 これにより、ブラウザー ベースの認証と比較してユーザー エクスペリエンス (UX) が変更されます。
  • forceRefreshacquireTokenSilent パラメーターはサポートされていません。 このフラグに関係なく、ブローカーからキャッシュされたトークンを受け取ることがあります。
  • ブローカー通信を機能させるには、D-Bus セッション バスが実行されている必要があります。

Limitations

  • Azure AD B2C および Active Directory フェデレーション サービス (AD FS) (AD FS) 機関は、Linux ブローカーを介してサポートされていません。
  • サード パーティの ID プロバイダー (IDP) はサポートされていません。
  • microsoft-identity-broker は、ブローカーが機能するためにデバイスにインストールされている必要があります。
  • msal-node は、ブローカーが使用できない場合はブラウザーにフォールバックしません。 ブローカーをサポートする環境でのみブローカーを有効にします。
  • アクセス トークン所有証明 (PoP) は現在、Linux ブローカーではサポートされていません。