0

我们目前在使用 ADFS 2.0 和外部 IP-STS 进行单点注销时遇到问题。我们的设置是: RP1 <-- 信任 --> ADFS 2.0 <-- 信任 --> 自定义 IP-STS RP2 <-- 信任 --> ADFS 2.0 <-- 信任 --> 自定义 IP-STS

单点登录部分非常有效,如果用户已经使用自定义 IP-STS 登录访问 RP1,那么他们可以在同一个浏览器会话中访问 RP2,而无需再次登录。

但是问题出现在退出过程中。当用户从 RP1 注销时,通过使用 Fiddler 我们可以看到:

  1. 注销请求 (wsignout1.0) 发送到 ADFS
  2. ADFS 将注销请求传输到自定义 IP-STS
  3. 自定义 IP-STS 进程正确退出操作,然后返回 ADFS
  4. ADFS 确实返回(退出)RP1
  5. RP1 不再认证,所以当然会提示重新登录(正确)
  6. 这里有问题: RP2 仍然能够毫无问题地工作(之前的声明集)。并且 ADFS 不会向 RP2 发送任何 wsignoutcleanup1.0 操作。

我假设 ADFS 应该为具有相同会话的所有 RP 注销,但事实并非如此。我错了吗?还是我在这里缺少某种配置?

当然,我们可以选择从自定义 IP-STS 向 RP 显式发送 wsignoutcleanup1.0 操作,但我们需要解析“wctx”以获得我不想要的原始 RP Url。我还尝试将 wsignoutcleanup1.0 操作从自定义 IP-STS 发送回 ADFS(步骤 3),但它也没有帮助。

4

2 回答 2

1

我的猜测是,您返回的不是带有 wsignoutcleanup 的 iframe,而是图像。因此,adfs 不会返回嵌套的 iframe,换句话说,它不会正确升级注销。

正确的顺序是

1 个应用程序向 adfs 发送注销请求

2 adfs 将请求升级到外部 sts

3 sts 使用 wsignoutcleanup 返回指向经过身份验证的应用程序(在本例中为 adfs)的 iframe 序列

4 adfs 向所有经过身份验证的应用程序返回一个带有 wsignoutcleanup 的嵌套 iframe,包括 rp1 和 rp2

于 2013-06-19T19:35:34.453 回答
0

听起来自定义 STS 没有将 signoutcleanup 发送到 ADFS。

于 2013-06-19T19:28:32.327 回答