saml - 将用户从 SP 注销但不从 IDP 注销

标签 saml saml-2.0

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

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

最佳答案

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

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

整个流程可能是这样的:

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

将 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>

关于saml - 将用户从 SP 注销但不从 IDP 注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23021870/

相关文章:

java - 如何从 Java 与 ADFS 通信?

saml - 为什么 SAML 服务提供商应该信任 SAML 响应?

java - DefaultBootstrap.bootstrap性能问题

saml-2.0 - IdP 如何识别用户是否具有安全上下文

java - OpenSaml AuthnRequest 签名

single-sign-on - 不同的 NameID 格式有何用途?

authentication - 使用 SAML 不记名 token 对用户进行后端服务身份验证是个坏主意吗?

saml-2.0 - IDP 与 ITfoxtec 启动了 SAML 流程

php - SimpleSamlPhp 作为 SP 重定向不正确

php - SSO - 如何从内部网(SAML 2.0)自动登录到外部网站?