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

React中Azure MSAL获取的Access Token闲置后首次请求报401未授权问题排查求助

React中Azure MSAL获取的Access Token闲置后首次请求报401未授权问题排查求助

大家好,我最近遇到一个特别费解的问题,想请各位帮忙分析下:

我维护着一个基于React的应用,用@msal/react包做身份认证,后端是带[Authorize]属性的ASP.NET Core Web API。现在出现的情况是:当应用在开发服务器上闲置一段时间(比如一两周)后,我回到页面发起接口请求,会直接收到401 Unauthorized的错误;但只要做一次硬刷新,请求就能正常通过——更奇怪的是,硬刷新前后用的居然是同一个Access Token!

我已经做了一些排查:

  • 把第一次报错时用的那个Access Token复制到后端的Swagger里测试,接口能正常返回数据,说明Token本身是有效的,后端的授权逻辑应该没问题
  • 检查了MSAL的实例状态,闲置后回到页面时accounts数组里的用户信息看起来也是正常的

下面是我用来获取和维护Access Token的自定义Hook代码,麻烦各位帮忙看看有没有什么潜在问题:

const useAccessToken = () => {
  const { instance, accounts } = useMsal()
  const [accessToken, setAccessToken] = useState('')

  const getAccessToken = useCallback(async () => {
    try {
      const user = JSON.parse(localStorage.getItem('user'))
      const response = await instance?.acquireTokenSilent({
        account: accounts[0],
        forceRefresh: true,
        scopes: user?.role === config.someUserRole 
          ? [b2cOptions.scopes[0]] 
          : [entraOptions.scopes[1]],
      })
      setAccessToken(response.accessToken)
    } catch (error) {
      localStorage.clear()
      instance?.logoutPopup({ 
        mainWindowRedirectUri: loginRoute, 
      })
    }
  }, [accounts, envConfig, instance, setAccessToken])

  useEffect(() => {
    getAccessToken()
  }, [accounts, getAccessToken, instance])

  return accessToken
}

export default useAccessToken

目前我完全摸不着头绪,会不会是MSAL的客户端缓存有什么过期逻辑没处理好?或者请求头在闲置后有什么异常?希望有遇到类似问题的朋友能给点思路,谢谢!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 14:04:50