使用ADFS和STS进行单点注销

时间:2013-06-19 18:26:08

标签: single-sign-on wif adfs2.0

我们目前在使用ADFS 2.0和外部IP-STS进行单点注销时遇到问题。我们的设置是:   RP1< - trust - > ADFS 2.0< - trust - >自定义IP-STS   RP2< - trust - > ADFS 2.0< - trust - >自定义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操作。
  7. 我认为ADFS应该为所有具有相同会话的RP注销,但事实并非如此。我错了吗?或者我在这里错过了某种配置?

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

2 个答案:

答案 0 :(得分:1)

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

正确的顺序是

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

2 adfs将请求升级为外部sts

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

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

答案 1 :(得分:0)

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