我们目前在使用 ADFS 2.0 和外部 IP-STS 进行单点注销时遇到问题。我们的设置是: RP1 <-- 信任 --> ADFS 2.0 <-- 信任 --> 自定义 IP-STS RP2 <-- 信任 --> ADFS 2.0 <-- 信任 --> 自定义 IP-STS
单点登录部分非常有效,如果用户已经使用自定义 IP-STS 登录访问 RP1,那么他们可以在同一个浏览器会话中访问 RP2,而无需再次登录。
但是问题出现在退出过程中。当用户从 RP1 注销时,通过使用 Fiddler 我们可以看到:
- 注销请求 (wsignout1.0) 发送到 ADFS
- ADFS 将注销请求传输到自定义 IP-STS
- 自定义 IP-STS 进程正确退出操作,然后返回 ADFS
- ADFS 确实返回(退出)RP1
- RP1 不再认证,所以当然会提示重新登录(正确)
- 这里有问题: RP2 仍然能够毫无问题地工作(之前的声明集)。并且 ADFS 不会向 RP2 发送任何 wsignoutcleanup1.0 操作。
我假设 ADFS 应该为具有相同会话的所有 RP 注销,但事实并非如此。我错了吗?还是我在这里缺少某种配置?
当然,我们可以选择从自定义 IP-STS 向 RP 显式发送 wsignoutcleanup1.0 操作,但我们需要解析“wctx”以获得我不想要的原始 RP Url。我还尝试将 wsignoutcleanup1.0 操作从自定义 IP-STS 发送回 ADFS(步骤 3),但它也没有帮助。