Microsoft Authentication Library (MSAL) ノードは、macOS 認証ブローカーを使用して、オペレーティング システムに知られているアカウントを使用してシングル サインオン (SSO) とセキュリティで保護されたトークンの取得を提供できます。 この記事では、macOS ブローカーと、MSAL ノードでブローカー認証を有効にして使用する方法について説明します。
すべてのプラットフォームでのブローカー サポートの概要については、 ネイティブ トークン ブローカーでの MSAL ノードの使用に関するページを参照してください。
macOS ブローカーとは
macOS では、認証ブローカーは、ポータル サイト アプリに付属する Apple デバイス用の Microsoft Enterprise SSO プラグインによって提供されます。 ブローカーは、接続されたアカウントの認証ハンドシェイクとトークンのライフサイクルを管理します。 主な利点は次のとおりです。
- セキュリティの強化。 セキュリティの強化は、アプリ コードの変更を必要とせずに、ブローカーの更新プログラムを通じて提供されます。 更新トークンはデバイスにバインドされ、流出から保護されます。
- システム統合。 ユーザーは、ポータル サイトから既存のサインインアカウントを再利用できるため、資格情報の再入力が減ります。
- トークン保護。 ブローカーは、更新トークンがデバイス コンテキストにバインドされていることを確認します。
サポートされているプラットフォームとアーキテクチャ
| コンポーネント | サポートされている |
|---|---|
| Architecture | ARM64 (Apple Silicon) と x64 (Intel) |
| macOS バージョン | macOS 10.15 (Catalina) 以降 |
Tip
最新のセキュリティ機能とブローカー機能との互換性を確保するために、最新の macOS バージョンに更新することをお勧めします。
Prerequisites
- Node.js 18 以降
- 依存関係として
@azure/msal-node-extensionsをインストールする - デバイスはポータル サイト経由で登録する必要があります。 登録後、他のMicrosoft アプリが SSO 拡張機能を使用してサインインできることを確認します (たとえば、ポータル サイト経由でWordにサインインできます)。
- アプリの登録にブローカー リダイレクト URI を登録します。 サポートされている URI 値については、「 リダイレクト URI」を参照してください。
リダイレクト URI
macOS ブローカー フローの場合は、Azure ポータルのモバイル およびデスクトップ アプリケーション プラットフォームの下にプラットフォーム固有のリダイレクト URI を登録する必要があります。
署名されていないアプリケーション (スクリプト、CLI ツール) の場合:
スクリプトや CLI ツールなどの署名されていないアプリケーションには、次のリダイレクト URI を使用します。
msauth.com.msauth.unsignedapp://auth
署名済み/バンドルされたアプリケーションの場合:
署名済みまたはバンドルされたアプリケーションには、次のリダイレクト URI 形式を使用します。
msauth.<your-bundle-id>://auth
<your-bundle-id>をアプリケーションの Apple バンドル識別子 (例: msauth.com.example.myapp://auth) に置き換えます。
Important
ブローカー リダイレクト URI は、ブローカー フロー にのみ 使用する必要があります。 アプリケーションでブラウザー ベースの認証フローも使用している場合は、個別のリダイレクト URI を使用します。 ブラウザー ベースのフローにブローカー リダイレクト URI を指定すると、エラーが発生します。
機能の有効化
macOS ブローカーを有効にするには、Windowsと同じ構成が必要です。 ブローカー構成で 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 は、ブローカーが使用できない場合、ブラウザー ベースのフローにフォールバックしません。 予期しないエラーを回避するために、ブローカーをサポートする環境でのみブローカー認証を有効にします。
トークンの取得
対話型トークンの取得
acquireTokenInteractiveを使用して、macOS ブローカーを介してトークンを要求します。
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);
}
トークンのキャッシュ
認証ブローカーは、更新とアクセス トークンのキャッシュを処理します。 ブローカーを介して取得されたトークンは、ブローカー自体によって管理され、デバイスバインドされます。 ブローカーを使用するときにカスタム キャッシュを設定する必要はありません。
macOS ブローカーを使用する場合の違い
- ブローカーが対話を求める必要がある場合は、ネイティブ macOS 認証ダイアログが表示されます。 これにより、ブラウザー ベースの認証と比較してユーザー エクスペリエンス (UX) が変更されます。
-
forceRefreshのacquireTokenSilentパラメーターはサポートされていません。 このフラグに関係なく、ブローカーからキャッシュされたトークンを受け取ることがあります。 - アクセス トークンの所有証明 (PoP) は、ブローカーを通じてサポートされます。
Limitations
- Azure AD B2C および Active Directory フェデレーション サービス (AD FS) (AD FS) 機関は、macOS ブローカーを介してサポートされていません。
- サード パーティの ID プロバイダー (IDP) はサポートされていません。
- ポータル サイトをインストールし、ブローカーが機能するためにはデバイスを登録する必要があります。
-
msal-nodeは、ブローカーが使用できない場合はブラウザーにフォールバックしません。 ブローカーをサポートする環境でのみブローカーを有効にします。