【发布时间】:2021-02-15 13:08:34
【问题描述】:
我正在尝试使用 SAML 保护资源。有三个参与者在起作用:身份提供者(IDP,我无法控制)、服务提供者(SP,我碰巧在使用 spring-security-saml,但这个问题并不特定于此)和受保护资源(PR ,SP 之外的服务中的一些受保护端点)。
我需要支持两种场景:
- 用户第一次尝试访问 PR,没有任何类型的会话。
- 用户在之前访问过 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