You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MSAL.js中ssoSilent()与acquireTokenSilent()的差异及适用场景

MSAL.js中ssoSilent()与acquireTokenSilent()的区别及适用场景

核心差异

1. 定位与核心目标

  • ssoSilent():是静默登录工具,核心是借助浏览器中已存在的Azure AD会话(比如用户在同浏览器的其他应用已登录),无需用户操作完成身份验证,同时返回账户和令牌。它的核心逻辑是"建立/恢复用户会话",令牌是附带结果。
  • acquireTokenSilent():是静默令牌获取/刷新工具,核心是为已经完成登录的用户获取访问令牌,前提是本地已有该用户的账户信息。它的核心逻辑是"拿令牌调用API",完全依赖已存在的本地账户。

2. 账户参数要求

  • ssoSilent():不需要传入Account参数。它会自动检测浏览器内的SSO会话,匹配应用的租户/客户端ID,自动创建并返回账户对象;如果没有有效会话,会抛出interaction_required错误。
  • acquireTokenSilent():必须传入Account参数(特殊场景可用loginHint替代,但常规场景必须指定)。它只会针对指定账户,从本地缓存取令牌或用刷新令牌换新令牌,不会主动检测跨标签页的SSO会话。

3. 缓存与会话逻辑

  • ssoSilent():执行时会主动向Azure AD发起请求验证会话,成功后将账户和令牌存入MSAL本地缓存;如果本地已有账户,也会同步更新令牌信息。
  • acquireTokenSilent():优先读取本地缓存的有效令牌,缓存过期才会用刷新令牌换新令牌;不会主动触发Azure AD的会话验证,只有刷新令牌失效时才会报错。

适用场景

用ssoSilent()的场景

  • 应用初始化自动登录:打开应用时,自动识别用户是否已在浏览器登录过同租户的其他应用,无需点击登录按钮即可进入应用。
  • 跨应用/标签页SSO:用户在A应用登录后,打开同浏览器的B应用,B应用调用ssoSilent()就能自动获取会话完成登录。
  • 恢复中断的会话:用户关闭标签页重开应用,用ssoSilent()快速恢复登录状态,不用重新输凭据。

用acquireTokenSilent()的场景

  • 调用API前拿令牌:用户已登录后,每次调用受保护API前,用它从缓存取有效令牌,缓存失效自动刷新,保证API授权正常。
  • 指定账户的令牌管理:本地有多个账户时,精准指定某一账户获取对应令牌。
  • 令牌提前刷新:在令牌过期前调用,提前刷新避免API调用失败。

误区澄清

你觉得acquireTokenSilent()能完成全部工作,是有前提的:只有本地已有账户缓存时,它才能正常获取令牌;如果本地无账户(比如首次打开应用、缓存被清空),它会直接报错,无法触发SSO会话检测。而ssoSilent()的核心价值就是在本地无账户时,通过浏览器的SSO会话获取账户和令牌,完成登录流程。

内容的提问来源于stack exchange,提问作者Jake_3H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 05:05:14