使用Azure AD JWT访问自定义API服务器的方案是否安全?
方案安全性分析:Azure Entra ID + React + 无过期校验的自定义API
你的方案存在两处关键安全风险,整体安全性不足,具体分析如下:
1. localStorage存储JWT的风险
- localStorage以明文形式存储数据,且前端JavaScript可直接访问。如果你的React应用存在XSS漏洞,攻击者注入恶意脚本后,能轻易窃取localStorage中的JWT,进而冒充合法用户调用你的自定义API,直到令牌自然过期(75分钟)。
- 相比之下,带有HttpOnly、Secure属性的Cookie不会被前端JS读取,能有效规避XSS攻击导致的令牌窃取风险。
2. 自定义API不校验JWT过期的风险
- 即使JWT已经过期,只要攻击者获取到这个过期令牌,依然可以通过你的API获取用户邮箱信息或执行其他操作,相当于把令牌的有效期无限延长,大幅提升了令牌被盗用后的危害时长。
- Azure AD签发的JWT本身包含
exp(过期时间)声明,API完全可以利用这个字段快速校验令牌有效性,不做校验属于明显的安全疏漏。
优化建议
- 替换存储方式:优先使用带HttpOnly、Secure属性的Cookie存储JWT;若必须前端存储,改用sessionStorage(页面关闭后自动清除,风险低于localStorage)。
- 强制API校验逻辑:在自定义API中必须完成两项校验:一是验证JWT的签名(确保令牌由Azure Entra ID签发且未被篡改),二是校验
exp字段判断令牌是否过期。 - 可选:实现令牌刷新:引入refresh_token机制,在access_token过期前自动获取新令牌,既提升用户体验,也可进一步缩短access_token有效期,降低被盗用风险。
内容的提问来源于stack exchange,提问作者Lakshay Dulani
相关产品推荐
相关产品推荐

