MSAL.js を使用してクライアント アプリケーションを初期化する

この記事では、ユーザー エージェント アプリケーションのインスタンスを使用して JavaScript 用 Microsoft Authentication Library (MSAL.js) を初期化する方法について説明します。

ユーザー エージェント アプリケーションは、Web ブラウザーなどのユーザー エージェントでクライアント コードが実行されるパブリック クライアント アプリケーションの一種です。 ブラウザー コンテキストがオープンにアクセスできるため、このようなクライアントでは、シークレットは保存されません。

クライアント アプリケーションの種類とアプリケーションの構成オプションの詳細については、MSAL のパブリック クライアント アプリケーションと機密クライアント アプリケーションに関するページを参照してください。

前提条件

アプリケーションを初期化する前に、まず、そのアプリケーションを Microsoft Entra 管理センターに登録して、アプリケーションと Microsoft ID プラットフォーム間で信頼関係を確立する必要があります。

アプリの登録後、Microsoft Entra 管理センターで確認できる次の値の一部またはすべてが必要になります。

必須 説明
アプリケーション (クライアント) ID 必須 Microsoft ID プラットフォーム内でアプリケーションを一意に識別する GUID。
Authority 省略可能 ID プロバイダーの URL (インスタンス) とアプリケーションのサインイン対象ユーザー。 インスタンスとサインイン対象ユーザーが連結されると、Authority が構成されます。
ディレクトリ (テナント) ID 省略可能 組織専用の基幹業務アプリケーション (シングルテナント アプリケーションとも呼ばれる) をビルドしている場合は、ディレクトリ(テナント)IDを指定します。
リダイレクト URI 省略可能 Web アプリを構築している場合、redirectUri では、ID プロバイダー (Microsoft ID プラットフォーム) が発行済みのセキュリティ トークンを返す場所を指定します。

MSAL.js 2.x アプリの初期化

構成オブジェクトを使用して PublicClientApplication をインスタンスすることで、MSAL 認証コンテキストを初期化します。 最低限必要な構成プロパティは、アプリケーションの clientID です。これは、Microsoft Entra 管理センターのアプリ登録の [概要] ページにアプリケーション (クライアント) ID として表示されます。

次に、構成オブジェクトと PublicClientApplication のインスタンス化の例を示します。

const msalConfig = {
  auth: {
    clientId: "Enter_the_Application_Id_Here",
    authority: "https://login.microsoftonline.com/Enter_the_Tenant_Info_Here",
    knownAuthorities: [],
    redirectUri: "https://localhost:{port}/redirect",
    postLogoutRedirectUri: "https://localhost:{port}/redirect",
    navigateToLoginRequestUrl: true,
  },
  cache: {
    cacheLocation: "sessionStorage",
    storeAuthStateInCookie: false,
  },
  system: {
    loggerOptions: {
      loggerCallback: (
        level: LogLevel,
        message: string,
        containsPii: boolean
      ): void => {
        if (containsPii) {
          return;
        }
        switch (level) {
          case LogLevel.Error:
            console.error(message);
            return;
          case LogLevel.Info:
            console.info(message);
            return;
          case LogLevel.Verbose:
            console.debug(message);
            return;
          case LogLevel.Warning:
            console.warn(message);
            return;
        }
      },
      piiLoggingEnabled: false,
    },
    windowHashTimeout: 60000,
    iframeHashTimeout: 6000,
    loadFrameTimeout: 0,
  },
};

// Create an instance of PublicClientApplication
const msalInstance = new PublicClientApplication(msalConfig);

// Handle the redirect flows
msalInstance
  .handleRedirectPromise()
  .then((tokenResponse) => {
    // Handle redirect response
  })
  .catch((error) => {
    // Handle redirect error
  });

handleRedirectPromise

アプリケーションでリダイレクト フローを使用する場合は、handleRedirectPromise を呼び出します。 リダイレクト フローを使用する場合は、すべてのページ読み込みで handleRedirectPromise を実行する必要があります。

Promise から次の 3 つの結果が得られます。

  • .then が呼び出され、tokenResponse が truthy である: リダイレクト操作が成功すると、アプリケーションに戻ります。
  • .then が呼び出され、tokenResponse が 偽物 (null) である: リダイレクト操作では、アプリケーションに戻りません。
  • .catch が呼び出される: リダイレクト操作によりアプリケーションに戻りますが、エラーが発生しています。

MSAL.js 1.x アプリの初期化

構成オブジェクトを使用して UserAgentApplication をインスタンス化することで、MSAL 1.x 認証コンテキストを初期化します。 最低限必要な構成プロパティは、お使いのアプリケーションの clientID です。これは、Microsoft Entra 管理センターのアプリ登録の [概要] ページにアプリケーション (クライアント) ID として表示されます。

MSAL.js 1.2.x 以前のリダイレクト フロー (loginRedirect と acquireTokenRedirect) を使用した認証メソッドの場合、handleRedirectCallback() メソッドを介して成功またはエラーに対するコールバックを明示的に登録する必要があります。 MSAL.js 1.2. x以前ではコールバックを明示的にレジスタする必要がある。これは、リダイレクトフローが、ポップアップエクスペリエンスを持つメソッドと同様に promise を返さないためです。 バージョン 1.3.x 以降の MSAL.js では、コールバックの登録は省略可能です。

// Configuration object constructed
const msalConfig = {
  auth: {
    clientId: "Enter_the_Application_Id_Here",
  },
};

// Create UserAgentApplication instance
const msalInstance = new UserAgentApplication(msalConfig);

function authCallback(error, response) {
  // Handle redirect response
}

// Register a redirect callback for Success or Error (when using redirect methods)
// **REQUIRED** in MSAL.js 1.2.x and earlier
// **OPTIONAL** in MSAL.js 1.3.x and later
msalInstance.handleRedirectCallback(authCallback);

単一インスタンスと構成

MSAL.js 1.x および 2.x では、UserAgentApplication またはPublicClientApplication の 1 つのインスタンスと構成によって、それぞれが 1 つの認証コンテキストを表すように設計されています。

UserAgentApplication または PublicClientApplication の複数のインスタンスは、ブラウザーでキャッシュ エントリと動作の競合を引き起こす可能性があるため、お勧めしません。

次の手順

GitHub にある、この MSAL.js 2.x コード サンプルでは、次の構成オブジェクトを使用して PublicClientApplication をインスタンスする方法を示しています。