将用户从 SP 中注销,但不从 IDP 中注销

2024-04-18

是否可以将用户从使用 SAML 身份验证的应用程序中注销,但让他们保持登录 IDP 的状态,以便他们可以继续访问其他服务提供商?

我希望能够将用户从应用程序中注销,并让他们在返回应用程序时进行身份验证,而无需将其从 IDP 中注销(即我不想使用单点注销)。这可以通过 SAML 实现吗?


执行单点注销时,没有标准方法可以排除 IDP 会话的终止。此外,终止与单个会话参与者(单个服务提供商)的会话,同时保持其他会话打开,显然超出了 SAML 2.0 单点注销配置文件的范围(请参阅 saml-profiles-2.0-os.pdf,第 1139-1143 行) 。所以这不是要走的路。

但还有另一种解决方案。您可以在服务提供商处使用本地注销(例如,简单地使本地 HTTP 会话无效),并在向 IDP 发送 AuthnRequest 时将其与属性 ForceAuthn 结合起来(请参阅 saml-core-2.0-os,第 2042 行)。将 ForceAuthn 属性设置为 true 会强制身份提供程序对用户进行身份验证,即使存在现有 IDP 会话也是如此。

整个流程可能如下所示:

  1. 用户访问SP,需要进行身份验证
  2. SP 向 IDP 发送 SAML 2.0 AuthnRequest 并将 ForceAuthn 标志设置为 true
  3. IDP强制用户进行身份验证并响应SP
  4. SP 验证响应后创建本地会话
  5. 用户注销 SP 应用程序,这仅终止本地会话,不会干扰 IDP 会话或其他 SP 上的会话

将 ForceAuthn 标志设置为 true 可有效禁用单点登录,因此您可能需要使用一些 SP 端逻辑来确定是否使用该标志。

设置了标志的有效请求示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<saml2p:AuthnRequest AssertionConsumerServiceIndex="0"
    AttributeConsumingServiceIndex="myServiceID"
    Destination="https://idp.ssocircle.com:443/sso/SSOPOST/metaAlias/ssocircle"
    ForceAuthn="true" ID="a228aje276h0id1g48eihj5gfj9h8bi"
    IsPassive="false" IssueInstant="2014-04-11T22:07:05.438Z"
    Version="2.0" xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol">
    <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">urn:test:sp</saml2:Issuer>
</saml2p:AuthnRequest>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将用户从 SP 中注销,但不从 IDP 中注销 的相关文章

随机推荐