General
何时使用 MSAL 节点?
MSAL Node 支持公共/机密应用的基于服务器的身份验证。 这更适用于需要身份验证的基于服务器的身份验证方案/Web API。 可在此处找到受支持的方案的完整列表,此处列出了受支持的流
ADAL 节点的状态是什么? 迁移指南是否可用?
ADAL Node 目前处于维护状态,我们建议所有用户迁移到 MSAL Node。 MSAL 节点旨在完全替换 ADAL 节点。 对于希望从 ADAL 迁移到 MSAL 的用户,我们提供了 一个迁移文档 来帮助迁移。 请注意,所有应用都可能无法顺利迁移,因为这是对旧功能的彻底改革。
支持哪些服务?
MSAL Node 支持 Microsoft Entra ID、MSA、ADFS 和 B2C。 我们的示例在此处演示了其用法。 MSAL Node 还支持 单租户和多租户应用。
注意:目前支持 ADFS,尚未发布独立示例。 请稍后查看此处以获取最新更新。
什么是公共应用或机密应用? 在应用注册期间需要了解哪些信息?
请在 MSAL 基础知识中找到此信息
如果我提供了“authority”和“azureCloudOptions”,authority 字符串的默认值是什么?
如果开发人员提供 azureCloudOptions,MSAL.js 将覆盖 authority 中提供的任何值。 MSAL.js 还会优先采用在 request 中提供的参数,而不是 configuration 中提供的参数。 请注意,如果在配置中设置了 azureCloudOptions,它们在 request 中将优先于 authority。 如果开发者需要覆盖此设置,则需要在 request 中设置 azureCloudOptions。
令牌的有效期将是多久?
如何获取刷新令牌?
MSAL 节点不会出于安全原因公开刷新令牌。 相反,我们通过缓存管理刷新令牌,并根据需要更新它,以获取开发人员的相应 ID 令牌和访问令牌。 使用相应的 acquireToken* API 获取访问令牌,MSAL 将在必要时确保续订令牌。 如果刷新令牌是通过其他方式获取的,则可以使用 acquireTokenByRefreshToken API(另请参阅: 刷新令牌示例)。 有关Microsoft Entra令牌的更多详细信息,可在此处找到
电子是否受支持?
Yes. 请参阅 MSAL 节点示例。
是否支持交互式流?
Yes. MSAL Node 在 PublicClientApplication 上提供了 acquireTokenInteractive() API,用于处理授权代码流的两个阶段。 它将打开浏览器窗口供用户登录并返回一个 AuthenticationResult。 有关更多详细信息,请参阅 获取令牌请求 文档;有关实现示例,请参阅 auth-code-cli-app 示例。
MSAL 节点是否支持 SPA?
有关基于 SPA 的用例,请参阅 MSAL 浏览器 。 MSAL 节点应该是桌面应用、Web 应用、Web API 或服务器端身份验证方案的选择。
什么是 MSAL 节点扩展? 什么是缓存插件?
MSAL Node 扩展是 MSAL Node 的支持库,它为客户端应用程序提供安全机制来执行跨平台令牌缓存序列化和持久性。 请在此处找到使用情况、示例和详细信息
MSAL Node 扩展中提供的缓存插件是否可以在 Electron 应用程序中使用?
是。 如果遇到节点版本相关问题,请参阅此 说明 ,提供故障排除步骤。
支持哪些版本的 Node.js? 如果想要使用活动开发 Node.js 版本,如何绕过安装错误?
如 此处所述,MSAL Node 正式支持偶数编号的稳定 LTS 版本。
若要解决此问题,请注意:
-
Yarn:将
--ignore-engines标志传递给yarn命令。 -
npm:将
engine-strict=false添加到 .npmrc 文件中。
Important
MSAL Node v5 需要 Node.js 20 或更高版本。 不再支持 Node.js 16 和 18。
如何使用 MSAL Node 实现自助注册?
MSAL Node 支持身份验证代码流中的自助注册。 有关请求中支持的提示值及其预期结果,请参阅我们的文档此处;有关需要对您的 Azure 租户进行的自助注册和配置更改概述,请参阅此处。 请注意,自助服务注册在 B2C 和测试环境中不可用。
为什么我的应用在代理后面运行时无法正常工作?
从 MSAL Node v5 起,代理配置通过自定义 HTTP 客户端进行处理。 通过实例化支持代理的 INetworkModule 并将其作为 system config options 选项中的 networkClient 提供给系统,来实现你自己的网络客户端。 有关示例,请参阅 自定义 INetworkModule 示例 。
如何在 MSAL Node 中实现自定义 http(s) 代理?
从 MSAL Node v5 起, customAgentOptions 该参数已被删除。 若要使用自定义 HTTP(S) 代理,请通过实例化 INetworkModule 并在其中配置代理来实现自己的网络客户端。 在系统配置选项中,将自定义网络客户端提供为networkClient。 有关示例,请参阅 自定义 INetworkModule 示例 。
B2C
如何处理密码重置用户流?
新的密码重置体验现在是注册或登录策略的一部分。 当用户选择“忘记密码?”链接时,该用户会立即转到“忘记密码”体验。
建议迁移到新的密码重置体验,因为它简化了应用状态并减少了用户端的错误处理。 如果出于某种原因必须使用旧密码重置用户流,则必须在用户选择AADB2C90118链接时处理从 B2C 服务返回的错误代码。 若要了解如何执行此操作,请参阅示例: MSAL Node B2C Web 应用示例(使用身份验证代码)
Compatibility
是否可以将 MSAL Node 与 Microsoft Graph JavaScript SDK 配合使用?
可以,MSAL Node 可用作 Microsoft Graph JavaScript SDK 的自定义身份验证提供程序。 有关实现,请参阅示例:快速 Web 应用调用图形 API。
是否可以通过命令行预配 MSAL Node 应用?
是的,我们建议使用新的 Powershell Graph SDK 来执行此操作。 例如,以下脚本会在用户指定的租户中创建一个 Microsoft Entra 应用程序,为其配置类型为移动和桌面应用(即 InstalledClient)的自定义重定向 URI,以及用于 Microsoft Graph 的 User.Read 权限;然后,基于此应用程序对象在同一租户中预配一个服务主体:
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