【问题标题】:Single Sign Out with ADFS and STS使用 ADFS 和 STS 单点注销
【发布时间】:2013-06-19 18:26:08
【问题描述】:

我们目前在使用 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),但它也没有帮助。

【问题讨论】:

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


    【解决方案1】:

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

    正确的顺序是

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

    2 adfs 将请求升级到外部 sts

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

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

    【讨论】:

    • 我不使用您在 blogspot 中的示例中建议的图像。我的自定义 STS 只是在处理注销时重定向回 ADFS (https:///adfs/ls/?requestContextId=....),因为它是来自 WCF STS Web 服务模板 FederatedPassiveSecurityTokenServiceOperations.ProcessSignOutRequest(requestMessage, User, requestMessage.Reply, Response); 的代码。会不会是问题?
    • 是的,这是个问题。按照我的教程,但渲染 iframes 而不是 imgs。 netpl.blogspot.com/2010/12/…
    • 在停止将 requestMessage.Reply 传递给 ProcessSignOutRequest 并使用 wsignoutcleanup 操作将 iframe 渲染到 ADFS 后,它现在可以工作了。
    • 还有一个问题:为什么我在将 wsignoutcleanup 操作显式添加到 requestMessage.Reply 之前将它传递给 ProcessSignOutRequest 之前它不起作用?
    • 很难说没有 http 调试跟踪。使用 Fiddler 或 HttpFox 嗅探所有请求和响应,并将有效序列与无效序列进行比较。
    【解决方案2】:

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

    【讨论】:

    • 实际上,我在尝试寻找解决方案时这样做了。但如上所述,它没有帮助。退出过程仍会在 ADFS 处停止。
    猜你喜欢
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多