react-adal令牌自动刷新及有效期配置问题求助
解决方案
首先明确:react-adal没有提供直接配置令牌有效期的客户端属性,因为令牌的有效期由你的身份提供商(此处为Azure AD)决定,默认access_token和id_token有效期均为1小时,客户端无法通过配置修改该值。不过可以通过两种方式满足你的需求:
1. 利用react-adal内置的自动刷新机制
react-adal的AuthenticationContext自带令牌自动刷新逻辑,只要你通过它提供的acquireToken方法获取令牌(而非直接读取缓存),当令牌即将过期时,它会自动尝试静默刷新令牌(前提是用户会话仍有效,未关闭浏览器或退出登录)。
示例:封装令牌获取函数
// 封装获取API令牌的函数 export const getApiToken = () => { return new Promise((resolve, reject) => { // 此处的api对应你在adalConfig.endpoints中配置的资源名称 authContext.acquireToken(authContext.config.endpoints.api, (error, token) => { if (error) { reject(error); } else { resolve(token); } }); }); };
之后调用API时,使用该函数获取令牌,而非直接读取缓存:
// API调用示例 async function fetchData() { try { const token = await getApiToken(); const response = await fetch('/api/data', { headers: { 'Authorization': `Bearer ${token}` } }); const data = await response.json(); // 处理返回数据 } catch (err) { // 处理错误,例如跳转至登录页 authContext.login(); } }
2. 在Azure AD中调整令牌生命周期(最长24小时)
如果需要令牌有效期最长达1天(24小时),可在Azure门户的应用注册中配置令牌生命周期:
- 登录Azure门户,找到你的应用注册
- 进入令牌配置选项
- 添加新的令牌策略,将access_token的有效期设置为24小时(这是Azure AD允许的最大值)
注意:该配置为全局设置,会影响所有使用该应用注册的客户端。
内容的提问来源于stack exchange,提问作者yogesh
相关产品推荐
相关产品推荐

