【问题标题】:ADFS do not forward the Logout request to the Identity Provider, if there is an active SAML session如果存在活动的 SAML 会话,ADFS 不会将注销请求转发给身份提供者
【发布时间】:2021-08-06 22:56:50
【问题描述】:

我有下一个组件:

  • RP-1(由 Ws-Fed、WIF 连接)
  • RP-2(通过 SAML、Federation Provider 连接,实际上是另一个 ADFS)
  • MY-ADFS(ADFS Server 2019 作为主要 STS)
  • MY-IP(单独的身份提供者网络服务,身份服务器 4)

因此,当我从 RP-1(Ws-Fed) 发出一个单独的请求时,一个简单的 Ws-Fed 注销就形成了一个对 ADFS 的请求:

GET https:/MY-ADFS/adfs/ls/

下一个 ADFS 重定向到 IP:

GET https://MY-IP/WsFederation

  • wa:wsignout1.0
  • 回复:https://MY-ADFS/adfs/ls/?redirectContextId=2dd581d2-6e02-4476-915b-a581e3c855d4

因此,用户从 ADFS 和 IP 清除会话。 - 正如预期的那样。

但是,如果在注销之前已转换到 SAML RP 并且 SAML 会话处于活动状态,那么在退出 ADFS 时会出现错误:

MSIS7055:并非所有 SAML 会话参与者都正确注销。这是 建议关闭浏览器。

为了解决这个问题,我将 SAML 依赖方信任中的注销端点 (URL) 配置为:

https:/RP-2/adfs/ls/?wa=wsignout1.0

使用 POST 绑定。在这些更改之后,错误消失了。但是现在 ADFS 不再使注销重定向到 IP,而是将 SAML 注销重定向到 RP-2:

POST https://RP-2/adfs/ls/?wa=wsignout1.0

  • SAMLRequest:PHNhbWxwOkxvZ291dFJl

结果,我没有切换到 IP,而是停留在 RP-2(ADFS 也是)页面上,上面写着退出成功。但是,用户在 IP 端仍然有一个活动会话(cookie)。

这里有几个问题:

  • 尚不清楚为什么 ADFS 会使用 SAML 活动会话更改调用链。
  • 尚不清楚如何排除 SAML 注销重定向,或强制 ADFS 也注销到 IP。

【问题讨论】:

    标签: single-sign-on adfs adfs4.0


    【解决方案1】:

    您还必须在 IP(身份提供商)端添加注销 URL,以确保通过 ADFS 从 SaaS 应用程序注销生成的 SAML 令牌转发到身份提供商并更新以在 IP 处注销授权提供者端。这样,浏览器上的cookie就会被更新,并且会顺利退出。

    请在身份提供者端找到以下可能的步骤来更新注销 URL:-

    1. 打开身份验证提供程序工作区。
    2. 找到注销 URL。
    3. 将 URL 更新为与 ADFS 服务器中配置的相同的“https://RP-2/adfs/ls/?wa=wsignout1.0”。
    4. 保存您的更改。

    关于您的第一个问题,为什么 ADFS 会使用 SAML 活动会话更改调用链,这是因为必须从系统中删除 cookie 和缓存才能成功注销请求,因此注销时记录的注销时间会更新在 SaaS 应用端,因此,建议关闭浏览器,让它在系统中也更新。

    因此,建议您在不同的浏览器窗口中打开这两个 RP 信任应用程序,因为它们都是为不同的令牌提供者配置的。

    请参阅以下主题以获取更多信息:-

    How do you handle the logout process for applications federated with ADFS?

    谢谢你,

    【讨论】:

    • 感谢您的回答!但是,即使我向 IP(身份服务器 4)添加(这是 SAML 还是 fs-fed?)一个注销端点,我仍然不理解,当 SAML 会话处于活动状态时,谁应该向身份提供者发送注销请求?到目前为止,我只有一项 IP 服务,所有 RP 都由它提供服务(通过 ADFS)。在没有 SAML 会话的情况下,我的 ADFS 向其中注册的 Claim Provider 形成了一个 ws-fed 注销请求。对于活动的 SAML 会话或由于其中一个 RP 是另一个 ADFS 的事实,现在它不会执行此操作。同样,如果我只想在 ADFS 和 Identity Server 之间保持 ws-fed 怎么办
    • 这是我所说的 SAML 注销 URL。向身份提供者发出的注销请求应由 SAML 身份验证服务提供者发送,即 ADFS 代理使用 Active Directory 为您配置的依赖方进行身份验证。如果您只想在 ADFS 和身份提供者之间使用 Ws-Fed,则需要在 ADFS 中配置 URL 以支持 WS-Federation Passive 协议,并将依赖方 WS-federation 被动协议 URL 配置为“abc.xyzportal.com/signin-federation”并配置身份提供程序以支持 WS-Fed 身份验证。
    • 我已经在 IP 和 ADFS 之间建立了 WS-Federation Passive。所有这一切都适用于使用 Ws-Fed 的 RP。但是,当 SAML RP-s 出现在系统中并且 SAML 会话开始在浏览器中处于活动状态时,当我向 ADFS 形成 WS-Fed 发出请求(来自任何 RP )。我的 IP 不支持 SAML。当 SAML 会话处于活动状态时,谁应该向 IP 发出 Ws-Fed 发出请求?
    猜你喜欢
    • 2020-04-23
    • 2015-04-16
    • 2020-03-11
    • 2018-07-31
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多