Azure B2C自定义策略下React应用会话管理方案咨询
Azure B2C自定义策略+React应用会话需求实现与方案验证
一、核心需求实现思路
1. 会话闲置30分钟后强制重新验证
需结合Azure B2C会话配置与React应用端token过期处理:
- B2C侧配置滚动会话过期,触发闲置超时后的重新认证;
- React端监听token的
exp(过期时间)与iat(签发时间),同时在路由守卫中监控用户会话活跃度,若超过30分钟无操作,主动清理本地token并跳转至登录页。
2. 限制用户会话数量
Azure B2C原生不直接支持会话数量限制,需通过以下方式实现:
- 利用B2C的自定义属性存储用户当前活跃会话的标识(如JWT的
jti); - 用户登录时,将当前会话标识新增至自定义属性,同时通过B2C REST API调用清理超出数量限制的旧会话对应token;
- token验证环节,检查当前会话标识是否在用户活跃会话列表中,不存在则拒绝认证。
3. 会话感知密码变更与超时
- 密码变更感知:用户修改密码后,B2C会自动吊销所有旧会话的refresh token,React端调用refresh token获取新token时会收到错误,此时需清理本地存储并跳转登录;
- 超时感知:监听B2C返回的token过期时间,结合应用端会话超时逻辑,在token即将过期或已过期时触发重新认证,同时处理B2C会话超时后的跳转逻辑。
二、两种会话生命周期方案验证
方案一:绝对会话过期
<UserJourneyBehaviors> <SingleSignOn Scope="Application" /> <SessionExpiryType>Absolute</SessionExpiryType> <SessionExpiryInSeconds>86400</SessionExpiryInSeconds> </UserJourneyBehaviors>
- 特点:会话从登录时刻起固定24小时后过期,不受用户操作影响;
- 适配性:不满足需求1的"闲置30分钟重新验证"要求,无法感知用户闲置状态,不符合核心需求。
方案二:滚动会话过期
<UserJourneyBehaviors> <SingleSignOn Scope="Application" /> <SessionExpiryType>Rolling</SessionExpiryType> <SessionExpiryInSeconds>1800</SessionExpiryInSeconds> </UserJourneyBehaviors>
- 特点:会话闲置30分钟(1800秒)后过期,用户有操作则自动刷新会话有效期;
- 适配性:完全匹配需求1的"闲置30分钟重新验证"要求,是满足第一个需求的正确配置。
三、需求2(会话数量限制)与需求3(会话感知)的补充建议
针对会话数量限制
- 先在Azure门户创建B2C自定义用户属性(如
activeSessions,类型为字符串集合),用于存储用户活跃会话标识; - 在登录流程的Orchestration Step中添加REST API调用,实现:
- 获取用户当前的
activeSessions列表; - 若列表长度达限制(如5个),移除最早的会话标识;
- 将当前会话的
jti(JWT ID)添加至列表并更新用户属性;
- 获取用户当前的
- 在token验证的技术配置文件中,添加检查逻辑:验证当前token的
jti是否存在于用户的activeSessions列表中,不存在则拒绝认证。
针对会话感知密码变更与超时
- 密码变更:在React应用中封装refresh token调用逻辑,收到
invalid_grant错误(表示refresh token失效)时,立即清理本地token与会话信息,跳转至登录页; - 超时处理:React应用路由守卫中,除检查token过期时间外,结合全局状态存储的用户最后操作时间,若超过30分钟无操作,主动触发重新认证;
- 需强制重新认证时,跳转至B2C登录页并携带
prompt=login参数,确保用户必须重新输入凭证。
内容的提问来源于stack exchange,提问作者Shiva S
相关产品推荐
相关产品推荐

