AD FS 4.0(2016及以上)获取新刷新令牌配置问题咨询
AD FS 2016 刷新令牌不轮换问题解决方案
核心原因
你对官方规则的伪代码逻辑理解存在偏差,默认配置下 AD FS 的刷新令牌有效期是和当前 SSO 会话的剩余有效期对齐的:
- 你设置了全局
SSOLifetime=7,首次授权时 SSO 会话刚建立,刷新令牌的初始有效期为7分钟,AD FS 内部允许非持久 SSO 下刷新令牌最多可延续到2倍 SSOLifetime 时长(也就是你观察到的14分钟) - 每次使用刷新令牌换领访问令牌时,SSO 会话的剩余有效期在持续缩短,新生成的刷新令牌有效期必然短于上一个刷新令牌的初始有效期,永远满足不了
newRefreshTokenLifetime > previousRefreshTokenLifetime的下发条件,因此不会返回新的刷新令牌。
配置方法
要实现刷新令牌按需下发甚至自动轮换,只需要给对应依赖方信任配置固定的刷新令牌有效期,打破和 SSO 会话剩余时间的对齐逻辑即可:
执行以下 PowerShell 命令:
# 给依赖方配置固定刷新令牌有效期,单位为分钟,可根据业务需要调整数值 Set-AdfsRelyingPartyTrust -TargetName MyRPT -RefreshTokenLifetime 14
配置完成后,每次使用刷新令牌请求新访问令牌时,AD FS 生成的新刷新令牌有效期会固定为当前时间加上你设置的RefreshTokenLifetime时长,该值必然大于旧刷新令牌的剩余有效期,会自动触发新刷新令牌的下发逻辑,同时旧刷新令牌会被 AD FS 自动作废,实现你需要的刷新令牌轮换效果。
如果需要更长的刷新令牌有效期,直接调整上述命令中的数值即可,比如设置为720即可让每次轮换后的刷新令牌拥有12小时有效期。该配置和你之前设置的PersistenSsoEnabled=$false不冲突,依然不会生成持久化会话Cookie。
内容的提问来源于stack exchange,提问作者h3rald
相关产品推荐
相关产品推荐

