在 Active Directory 联合身份验证服务(AD FS)中,当信赖方持续拒绝有效的安全令牌并重定向回 AD FS 时,会出现循环。
循环检测 Cookie
为防止此问题发生,AD FS 实现了循环检测 Cookie。 默认情况下,AD FS 将 Cookie 写入名为 MSISLoopDetectionCookie
Web 被动客户端。 此 Cookie 保存时间戳值和颁发的令牌数的值。 此信息允许 AD FS 跟踪客户端在特定时间跨度内访问联合身份验证服务的频率和次数。
如果被动客户端在 20 秒内访问联合身份验证服务五次,AD FS 将引发以下错误:
MSIS7042: The same client browser session has made '{0}' requests in the last '{1}' seconds. Contact your administrator for details.
进入无限循环通常是由于行为不当的信赖方应用程序未能成功使用 AD FS 颁发的令牌造成的。 然后,应用程序会反复将被动客户端发送回 AD FS 以获取新令牌。 AD FS 每次向被动客户端颁发一个新令牌,限制为 20 秒内 5 个请求。
调整循环检测 Cookie
可以使用 PowerShell 更改颁发的令牌数和时间跨度值的值。
Set-AdfsProperties -LoopDetectionMaximumTokensIssuedInterval 5 -LoopDetectionTimeIntervalInSeconds 20
最小值 LoopDetectionMaximumTokensIssuedInterval
为 1。
最小值 LoopDetectionTimeIntervalInSeconds
为 5。
还可以在执行性能测试时禁用循环检测。
Set-AdfsProperties -EnableLoopDetection $false
重要
不要永久禁用循环检测,因为它会阻止用户进入无限循环状态。