Single sign on 使用ADF和STS进行单点注销

Single sign on 使用ADF和STS进行单点注销,single-sign-on,wif,adfs2.0,Single Sign On,Wif,Adfs2.0,我们目前在使用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 自

我们目前在使用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应该为所有具有相同会话的RPs注销,但事实并非如此。我错了吗?还是我缺少某种配置?

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

    听起来好像自定义STS没有将signoutcleanup发送给ADFS。

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

    正确的顺序是

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

    2个adfs将请求上报给外部sts

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


    4 adfs向所有经过身份验证的应用程序(包括rp1和rp2)返回一个带有wsignoutcleanup的嵌套iframe实际上,我是在试图找到解决方案时这样做的。但如上所述,这没有帮助。注销过程仍然在ADFS处停止。我不使用blogspot中的示例中建议的图像。我的自定义STS只是重定向回ADFS(https:///adfs/ls/?requestContextId=....)处理注销时,因为它是来自WCF STS Web服务模板
    FederatedPassiveSecurityTokenServiceOperations.ProcessSignOutRequest(requestMessage、User、requestMessage.Reply、Response)的代码。可能是问题吗?是的,这是个问题。按照我的教程进行操作,但渲染iFrame而不是IMG。在停止传递
    requestMessage后,它现在可以工作。回复
    ProcessSignOutRequest
    ,还有一个问题:当我显式地将wsignoutcleanup操作添加到
    requestMessage时,为什么它不起作用。在将它传递到
    ProcessSignOutRequest
    之前回答
    ?很难说没有http调试跟踪。使用Fiddler或HttpFox嗅探所有请求和响应,并将有效序列与无效序列进行比较。