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

时间:2014-04-11 20:19:08

标签: saml saml-2.0

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

我希望能够将用户从应用程序中注销,并在他们返回应用程序时对其进行身份验证,而不将其从IDP中注销(即我不想使用单点注销)。这可能与SAML有关吗?

1 个答案:

答案 0 :(得分:5)

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

但还有另一种解决方案。您可以在服务提供商处使用本地注销(例如,只是使本地HTTP会话无效),并在将AuthnRequest发送到IDP时将其与属性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应用程序,该应用程序仅终止本地会话,不会干扰其他SP的IDP会话或会话
  6. 将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>