从 MSAL v2.x 迁移到 MSAL v3.x

如果你不熟悉 MSAL,则应 从此处开始。

如果来自 MSAL v1.x,应首先检查 本指南 以迁移到 MSAL v2.x,然后执行后续步骤。

如果来自 MSAL v2.x,可以按照本指南更新代码以使用 MSAL v3.x。

中断性变更

应用程序实例化

在 MSAL v2.x 中,已创建应用程序实例,如下所示:

import { PublicClientApplication } from "@azure/msal-browser";

const msalConfig = {
    auth: {
        clientId: 'your_client_id'
    }
};

const msalInstance = new PublicClientApplication(msalConfig);

在 MSAL v3.x 中,还必须初始化应用程序对象。 有几种选项可供选择:

选项 1

实例化一个 PublicClientApplication 对象,并在之后初始化它。 该 initialize 函数是异步的,必须在调用其他 MSAL.js API 之前解析。

import { PublicClientApplication } from "@azure/msal-browser";

const msalConfig = {
    auth: {
        clientId: 'your_client_id'
    }
};

const msalInstance = new PublicClientApplication(msalConfig);
await msalInstance.initialize();

方法 2

createPublicClientApplication调用返回初始化PublicClientApplication对象的静态方法。 请注意,此函数是异步的。

import { PublicClientApplication } from "@azure/msal-browser";

const msalConfig = {
    auth: {
        clientId: 'your_client_id'
    }
};

const msalInstance = await PublicClientApplication.createPublicClientApplication(msalConfig);

基于声明的缓存

在 MSAL v2.x 中,向请求添加声明将导致默认情况下将请求的声明字符串的哈希添加到令牌缓存密钥。 这意味着,MSAL 2.x 默认根据声明来缓存和匹配令牌。 在 MSAL v3.x 中,此行为不再是默认值。 MSAL v3.x 默认行为是在每次请求声明时转到网络来刷新令牌,而不管令牌之前是否已缓存并且仍然有效。 随后,在连接到网络后,接收到的令牌会覆盖缓存中的令牌,以防后续执行不包含声明的静默请求。 若要在 MSAL v3.x 中启用基于声明的缓存以保持与 MSAL v2.x 中相同的行为,开发人员必须使用 cacheOptions.claimsBasedCachingEnabled 在客户端应用程序配置对象中设置为 true 的配置标志:

const msalConfig = {
    auth: {
        ...
    },
    ...
    cache: {
        claimsBasedCachingEnabled: true
    }
}

const msalInstance = new msal.PublicClientApplication(msalConfig);
await msalInstance.initialize();

所有其他 API 与 MSAL v2.x 向后兼容。 建议查看 默认示例 ,查看 MSAL v3.0 的工作示例。

加密

MSAL v3.x 停止支持 IE11 原生加密window.msCrypto和 Microsoft Research JavaScript Cryptography Library(MSR crypto)window.msrCrypto,转而使用浏览器原生加密 APIwindow.crypto。 用于 MSR 加密的加密选项 config.system.cryptoOptions 也不再受支持。

密钥更改

浏览器支持

MSAL.js 不再支持以下浏览器:

  • IE 11
  • Edge(旧版)

包依赖项

Typescript 版本已从 3.8.3 升级到 4.9.5

编译器选项

模块/目标版本分别从 es6/es5 提升到 es2020/es2020

CDN

MSAL.js 不再托管在 CDN 上。 有关更多详细信息,请查看 此文档