【问题标题】:ITfoxtec SAML with load balanced web servers具有负载平衡 Web 服务器的 ITfoxtec SAML
【发布时间】:2019-04-22 12:47:00
【问题描述】:

我们正在使用 ITfoxtec.Identity.Saml2 库向我们的 SSO 进行身份验证 服务。

问题是我们在负载平衡的服务器上使用它。如果我们关闭粘性会话,应用程序将不再运行。

我尝试在创建会话时设置 isPersistent=true,但没有任何影响。我已经看到发布了与跨网络场存储 SAML 状态相关的类似问题,建议范围包括:

更改配置以使 webfarm 上的所有服务器使用相同的机器密钥 创建相当于状态服务的内容来存储身份验证。

我认为有一种方法可以将用户状态本地存储在 cookie 中,无论是否使用负载平衡,该 cookie 都可以重复使用。

关于如何攻击这个有什么建议吗?

【问题讨论】:

    标签: load-balancing saml-2.0 web-farm itfoxtec-identity-saml2


    【解决方案1】:

    使用 ITfoxtec.Identity.Saml2.Mvc 和 ASP.NET MVC,isPersitentCreateSession 方法的参数。中使用的CreateSession 方法 ASP.NET sample application.

    在接受 SAML 2.0 响应后调用该方法以创建由 SessionAuthenticationModule 处理的用户身份 cookie。

    默认用户身份 cookie 不是持久的。设置 isPersitent=true 会导致创建持久的用户身份 cookie。 isPersitent 设置与负载平衡无关。

    应该可以通过设置isReferenceMode=true来支持负载均衡。引用模式将用户身份 cookie 从自包含变为指针。

    在引用模式下,在序列化期间会生成一个简单的工件,并且令牌材料存储在与令牌处理程序关联的令牌缓存中。令牌缓存是派生自 SessionSecurityTokenCache 的类的实例。对于 Web Farm 场景,令牌缓存必须在场中的所有节点上运行。

    也许你需要实现一个令牌缓存。

    更新:

    很抱歉,我没有示例。相反,我添加了一些可能对您有帮助的链接。

    WIF and Web Farms

    About SessionAuthenticationModule IsReferenceMode

    SessionSecurityTokenCache Class

    【讨论】:

    • 我尝试设置 isPersitent=true 但在我们的 Web 应用程序上进行负载平衡时仍然失败您提到实现令牌缓存。我看不到的是如何强制您的库在缓存中查找。您是否有实现状态服务的示例代码。创建会话后,当我逐步执行我们的实现时,不会出现身份验证过程重复的情况。当我们调用 CreateSession 时,我们在 HTTPContext.User 对象中创建存储 Principal。创建此会话后它不会出现,我们必须重新验证
    • (续)我们在 Azure Service Fabric 中托管我们的 Web 应用程序。当我们将负载平衡规则更改为没有粘性会话时,应用程序似乎保持身份验证,因为它不会将我们带回 SSO 屏幕,但我认为正在发生的事情是应用程序保持身份验证但也许我们正在失败声明或 SAML 令牌的其他重要部分。我试图通过从会话缓存中检索之前创建的用户主体来强制应用程序使用它,但是失败了。
    • (续)如何强制 SAML 会话将 SAML 会话持久化到/从持久化状态服务中获取/检索?
    猜你喜欢
    • 2015-04-01
    • 1970-01-01
    • 2011-04-07
    • 2011-09-05
    • 1970-01-01
    • 2011-09-21
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多