General
MSAL ノードはいつ使用されますか?
MSAL Node では、パブリック/コンフィデンシャル アプリのサーバー ベースの認証がサポートされています。 これは、認証を必要とするサーバー ベースの認証シナリオ/Web API に適用できます。 サポートされているシナリオの完全な一覧については、こちらを参照してください。サポートされているフローは次のとおりです。
ADAL ノードの状態は何ですか? 移行ガイドは利用できますか?
ADAL ノードは現在メインタンタンスであり、すべてのユーザーに MSAL ノードへの移行をお勧めします。 MSAL ノードは、ADAL ノードを完全に置き換えるために設計されています。 ADAL から MSAL に移行する場合は、移行に役立つ 移行ドキュメント が提供されています。 これは古い機能の完全な見直しであるため、すべてのアプリがスムーズな移行を行っていない可能性があることに注意してください。
サポートされているサービスは何ですか?
MSAL ノードでは、Microsoft Entra ID、MSA、ADFS、B2C がサポートされます。 サンプルでは、 ここでの使用方法を示します。 MSAL Node では、 シングル テナント アプリとマルチテナント アプリもサポートされます。
注: ADFS は現在サポートされています。スタンドアロン サンプルはまだ公開されていません。 近日中の更新については、こちらをご確認ください。
パブリック アプリまたは機密アプリとは アプリの登録時に知っておくべきこと
MSAL の基本でこれを確認してください
"authority" と "azureCloudOptions" を指定した場合、機関文字列の既定値は何ですか?
開発者が azureCloudOptionsを提供した場合、MSAL.js は authorityで指定された値を上書きします。 MSAL.js は、requestよりもconfigurationで指定されたパラメーターを優先します。 構成でazureCloudOptionsが設定されている場合は、authorityのrequestよりも優先されることに注意してください。 開発者はこれを上書きする必要がある場合は、azureCloudOptionsでrequestを設定する必要があります。
トークンの有効期間は何ですか?
- Microsoft Entra: Microsoft Entraの最新のリファレンスについては、こちらをご覧ください。 特定のトークンの種類に対して構成可能な機能の一部が最近廃止されることに注意してください。
- B2C: B2C トークンの有効期間に関するガイダンス については、こちらをご覧ください
更新トークンを取得する方法
MSAL ノードは、セキュリティ上の理由から更新トークンを公開しません。 代わりに、キャッシュを介して更新トークンを管理し、必要に応じて更新して、開発者の対応する ID トークンとアクセス トークンをフェッチします。 適切な acquireToken* API を使用してアクセス トークンを取得すると、MSAL によって必要に応じて更新されます。 他の方法で取得した更新トークンがある場合は、 acquireTokenByRefreshToken API を使用できます ( 「更新トークンのサンプル」も参照)。 Microsoft Entra トークンの詳細については、こちらを参照してください。
Electron はサポートされていますか?
Yes. MSAL ノードのサンプルを参照してください。
対話型フローはサポートされていますか?
Yes. MSAL ノードは、承認コード フローの両方の足を処理するacquireTokenInteractive()に対するPublicClientApplication API を提供します。 ユーザーがサインインするためのブラウザー ウィンドウが開き、 AuthenticationResultが返されます。 実装例については、 トークン要求の取得 に関するドキュメントと auth-code-cli-app サンプル を参照してください。
SPA は MSAL ノードでサポートされていますか?
SPA ベースのユース ケースについては、 MSAL ブラウザー を参照してください。 MSAL ノードは、デスクトップ アプリ、Web アプリ、Web API、またはサーバー側の認証シナリオに対して選択する必要があります。
MSAL Node 拡張機能とは キャッシュ プラグインとは
MSAL Node 拡張機能は、クライアント アプリケーションがクロスプラットフォーム トークン キャッシュのシリアル化と永続化を実行するためのセキュリティで保護されたメカニズムを提供する MSAL Node のサポート ライブラリです。 使用方法、サンプルなどについては、 こちらをご覧ください
MSAL Node 拡張機能で提供されるキャッシュ プラグインは、Electron アプリケーションで使用できますか?
はい、できます。 ノード バージョンに関連する問題が発生した場合は、トラブルシューティングの手順を示すこの メモ を参照してください。
サポートされている Node.js のバージョンは何ですか? アクティブな開発 Node.js バージョンを使用する場合、インストール エラーをバイパスするにはどうすればよいですか?
MSAL Node では、 ここに記載されているように、番号付けされた安定した LTS リリースも正式にサポートされています。
この問題を回避する場合は、次の点に注意してください。
-
Yarn:
--ignore-enginesフラグをyarnコマンドに渡します。 -
npm: .npmrc ファイルに
engine-strict=falseを追加します。
Important
MSAL Node v5 には 20 以降 Node.js 必要です。 Node.js 16 と 18 はサポートされなくなりました。
MSAL Node でセルフサービス サインアップを実装するにはどうすればよいですか?
MSAL Node では、認証コード フローでのセルフサービス サインアップがサポートされます。 要求でサポートされているプロンプト値とその期待される結果については、こちらのドキュメントを参照してください。また、Azure テナントに対して行う必要があるセルフサービス サインアップと構成の変更の概要については、こちらを参照してください。 B2C およびテスト環境では、セルフサービス サインアップは使用できません。
プロキシの背後でアプリが実行されているときにアプリが正しく機能しないのはなぜですか?
MSAL Node v5 の時点では、プロキシ構成はカスタム HTTP クライアントを介して処理されます。 プロキシのサポートを使用して INetworkModule をインスタンス化して独自のネットワーク クライアントを実装し、networkClientのとして提供します。 例については、 カスタム INetworkModule サンプル を参照してください。
MSAL ノードにカスタム http(s) エージェントを実装するにはどうすればよいですか?
MSAL Node v5 の時点で、 customAgentOptions パラメーターは削除されました。 カスタム HTTP(S) エージェントを使用するには、 INetworkModule をインスタンス化し、その中でエージェントを構成することで、独自のネットワーク クライアントを実装します。
networkClientのとして、カスタム ネットワーク クライアントを指定します。 例については、 カスタム INetworkModule サンプル を参照してください。
B2C
パスワード リセット ユーザー フローを処理する方法
新しいパスワード リセット エクスペリエンスが、サインアップまたはサインイン ポリシーの一部になりました。 ユーザーが [パスワードを忘れた場合] リンクを選択すると、すぐにパスワードを忘れた場合のエクスペリエンスが表示されます。
新しいパスワード リセット エクスペリエンスに移行することをお勧めします。これにより、アプリの状態が簡略化され、ユーザー側でのエラー処理が減ります。 何らかの理由で従来のパスワード リセット ユーザー フローを使用する必要がある場合は、ユーザーが [AADB2C90118場合] リンクを選択したときに B2C サービスから返されるエラー コードを処理する必要があります。 これを行う方法については、サンプル「MSAL Node B2C Web アプリのサンプル (認証コードを使用)」を参照してください。
Compatibility
Microsoft Graph JavaScript SDK で MSAL ノードを使用できますか?
はい。MSAL Node は、Microsoft Graph JavaScript SDK のカスタム認証プロバイダーとして使用できます。 実装については、サンプル「Express Web App の呼び出しGraph API」を参照してください。
コマンド ラインを使用して MSAL Node アプリをプロビジョニングできますか?
はい。これを行うための新しい Powershell Graph SDK をお勧めします。 たとえば、次のスクリプトでは、ユーザーが指定したテナント内のMicrosoft Graphのカスタム リダイレクト URI (Mobile アプリとデスクトップ アプリ ( InstalledClient とも呼ばれます) と User.Read アクセス許可を持つMicrosoft Entra アプリケーションを作成し、このアプリケーション オブジェクトに基づいて同じテナントにサービス プリンシパルをプロビジョニングします。
Import-Module Microsoft.Graph.Applications
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Connect-MgGraph -TenantId "ENTER_TENANT_ID_HERE" -Scopes "Application.ReadWrite.All"
# User.Read delegated permission for Microsoft Graph
$mgUserReadScope = @{
"Id" = "e1fe6dd8-ba31-4d61-89e7-88639da4683d" # permission Id
"Type" = "Scope"
}
# Add additional permissions to array below
$mgResourceAccess = @($mgUserReadScope)
[object[]]$requiredResourceAccess = @{
"ResourceAppId" = "00000003-0000-0000-c000-000000000000" # MS Graph App Id
"ResourceAccess" = $mgResourceAccess
}
# Create the application
$msalApplication = New-MgApplication -displayName myMsalDesktopApp `
-SignInAudience AzureADMyOrg `
-PublicClient @{RedirectUris = "msal://redirect"} `
-RequiredResourceAccess $requiredResourceAccess
# Provision the service principal
New-MgServicePrincipal -AppId $msalApplication.AppId