在 Windows 上使用 WAM 获取设备绑定令牌

MSAL.js 支持从 Windows 上的 Web 帐户管理器(WAM)获取令牌。 这些令牌绑定到获取的设备,并且不会缓存在浏览器的 localStorage 或 sessionStorage 中。

支持的环境

此功能目前仅在以下环境中受支持:

  • 一台运行支持该功能的 Windows 版本的计算机(关于这一点,后续会有更多说明)
  • Chrome 或 Edge 浏览器,或 Teams
  • 如果使用 Chrome 或 Edge,则安装Windows帐户扩展(版本 1.0.5 或更高版本)
  • 应用必须托管在 https

此外,目前仅工作和学校帐户支持此功能

在 MSAL.js 中启用该功能

若要在 MSAL.js 中启用此功能,请将 allowPlatformBroker 配置对象中的标志设置为 true,如下所示:

const msalConfig = {
    auth: {
        clientId: "insert-clientId"
    },
    system: {
        allowPlatformBroker: true
    }
};

此外,在调用任何其他 MSAL.js API 之前,需要调用并等待新 initialize API。

const pca = new PublicClientApplication(msalConfig);

// Initialize will establish a connection with the browser extension, if present
await pca.initialize();

// Call handleRedirectPromise, after initialization is complete
await pca.handleRedirectPromise();

// After initialize and handleRedirectPromise have completed, you may call any of the other APIs as you would without this feature
pca.acquireTokenSilent();

无需进行其他更改即可支持此新功能。 从受支持的环境访问应用的任何用户现在都可以获取设备绑定令牌。 不支持的环境中的用户将继续通过传统的基于 Web 的流获取令牌。

在此处找到工作示例

使用 WAM 获取令牌时的差异

通过 WAM 获取令牌时,有些行为可能略有不同。

  • 所有与缓存相关的配置仅适用于 MSAL 的本地缓存。 本机代理管理其自有的、更安全的缓存,该缓存用于替代浏览器存储,且不支持配置其缓存行为。 这意味着,无论请求参数的值如何,都可以接收缓存的令牌,例如: forceRefreshcacheLookupPolicystoreInCache。 此外,无论在 PublicClientApplication 上配置了什么,从本机代理收到的令牌 都不会 存储在本地或会话存储中。
  • 如果 WAM 需要提示用户进行交互,则会打开系统提示。 此提示看起来与你可能使用的浏览器弹出窗口稍有不同。
  • 不支持在 WAM 提示符中切换帐户,如果发生这种情况,MSAL.js 将引发错误(错误代码:user_switch)。 应用有责任捕获此错误,并采用适合你的方案的方式处理此错误(例如,显示错误页、使用新帐户重试、使用原始帐户重试等)