受SAML保护的资源

时间:2020-11-02 20:36:37

标签: security saml saml-2.0 protected-resource

我正在尝试使用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访问令牌),因此似乎没有任何方法可以缓存用户的会话。

1 个答案:

答案 0 :(得分:2)

访问PR可能有两个条件。

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

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

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

获取或设置之间的会话时间 主题和SAML颁发机构确定的主体 该声明必须视为已结束

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

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