【问题标题】:SAML protected resourceSAML 保护资源
【发布时间】:2021-02-15 13:08:34
【问题描述】:

我正在尝试使用 SAML 保护资源。有三个参与者在起作用:身份提供者(IDP,我无法控制)、服务提供者(SP,我碰巧在使用 spring-security-saml,但这个问题并不特定于此)和受保护资源(PR ,SP 之外的服务中的一些受保护端点)。

我需要支持两种场景:

  1. 用户第一次尝试访问 PR,没有任何类型的会话。
  2. 用户在之前访问过 PR 时尝试再次访问它。

对于方案 1 的工作方式有充分的指导,因为据我所知,它是使用 SAML 的标准方式。不过,场景 2 似乎不太标准,我还没有找到任何关于如何处理它的明确文档。

在场景 1 中,流程似乎是标准的:

  • 用户尝试访问 PR
  • PR 将用户引导至 SP
  • SP 对 IDP 执行正常的 SAML 断言,然后将用户重定向到使用 IDP 登录
  • 用户成功登录 IDP
  • 用户被重定向回 SP 并提供有关用户的信息
  • SP 重定向回 PR(可能带有某种生成的令牌以供将来使用或有关用户的其他信息)
  • 来自 PR 的信息提供给用户

我不太清楚的是场景2,我的想法如下:

  • 用户尝试使用之前场景中提供的令牌访问 PR
  • PR 使用 SP 检查令牌的有效性
  • SP 确定令牌是否有效(这是如何完成的?SAML 标准中似乎没有任何内容可用于检查会话是否处于活动状态)
  • PR 允许根据 SP 的响应访问资源

我的问题是:

  • 我对场景 2 的理解正确吗?这就是 SAML 的使用方式吗?
  • 如何检查与 IDP 的会话的有效性?
  • PR 是否必须在每个请求上检查会话的有效性?由于 SAML 不需要过期(如 OAuth 访问令牌),因此似乎没有任何方法可以缓存用户的会话。

【问题讨论】:

    标签: security saml saml-2.0 protected-resource


    【解决方案1】:

    访问 PR 可以有两个条件。

    1. PR 创建的有效应用程序会话,在需要更新之前的指定时间。
    2. 应用程序会话所基于的有效 SAML 令牌。

    PR 可以认为只要 SAML 令牌有效,那么应用程序会话就有效。或者它可以决定每 10 分钟创建一个新会话,这意味着重定向到 IdP 以获取新的 SAML 令牌,新的应用程序会话基于该令牌。这取决于受保护的资源。在敏感资源(可能是医疗数据)中,应相应地管理会话。

    就 SAML 令牌有效性而言,IdP 使用Response/Conditions/NotBeforeResponse/Conditions/NotOnOrAfter 在设定的时间段内颁发令牌,这些令牌显示在examples 中。还有Response/AuthnStatement/SessionNotOnOrAfter可以用来检查有效性。这个:

    获取或设置会话之间的时间瞬间 主体和 SAML 颁发机构确定的委托人 此语句必须视为已结束

    来自here。这有效地限制了 PR 会话,因为 IdP 在此时间之后“拒绝”用户。例如一个小时访问 PR 的公共步入式访问请求。 NotOnOrAfter 指的是断言,而SessionNotOnOrAfter 指的是用户。在SessionNotOnOrAfter 之后,IdP 可能不会根据策略等对用户进行身份验证。

    如果 PR 需要更新应用程序会话,它可以要求 SP 验证 SAML 令牌,这可能涉及确定 NotOnOrAfter 是否过去。如果是,则 SP 将再次使用 IdP 启动该过程以获取新的 SAML 令牌。如果 IdP 正在处理敏感 PR,它可能会在有限的时间内释放属性,具体取决于最终授予访问权限的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-10
      • 2017-08-18
      • 1970-01-01
      • 2015-09-05
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 2020-11-30
      相关资源
      最近更新 更多