我们是否需要使用cookie进行SAML2登录?

时间:2014-01-02 16:01:26

标签: java cookies saml-2.0

我是SAML-2世界的新手。 我将使用java为基于Web的产品实现SAML-2。 我的同事建议采用以下解决方案来实施SAML-2。

我只想讨论它是否有意义......

情景A:John自首次在其公司实施SSO以来首次登录

  1. John将他的浏览器指向TMS
  2. TMS未在John的浏览器
  3. 的请求标头中找到存储为cookie的SAML令牌
  4. John的浏览器被重定向到标准TMS登录页面
  5. John输入正常的Windows登录凭据并点击ENTER
  6. TMS成功验证了他的公司IdP服务器的凭据,在本例中是使用SAML的ADFS
  7. SAML令牌返回给TMS并作为cookie保存在John的浏览器中
  8. John现在可以使用TMS
  9. 场景B:John想再次使用TMS但已关闭浏览器

    1. John打开一个新实例并将其指向TMS
    2. TMS在John的浏览器
    3. 的请求标头中找到存储为cookie的SAML令牌
    4. TMS验证此令牌是否有效,因此John绕过登录页面直接进入TMS
    5. 我的问题 - 这是一种标准或正确的方法吗? 如果我们使用cookie来记住SAML令牌,那么如果用户清除cookie或者不想保留cookie会怎么样?在这种情况下,用户每次都会被引导到登录页面......

      是否有任何资源(即书籍或在线教程)我可以为此特定目的进行调查?

      请让我知道你的建议。

2 个答案:

答案 0 :(得分:1)

您所描述的内容与联合登录在.NET平台上的工作方式非常接近。首次从Idp收到SAML2票证,但在后续请求中不涉及Idp,而是cookie。

但是,在.NET上,SAML2令牌不存储在cookie中,而是cookie包含适合.NET应用程序的形式的身份信息,以避免每次都需要重新解析和重新验证SAML2令牌。整个cookie使用只有服务器知道的密钥加密,因此用户无法篡改它。

答案 1 :(得分:0)

在您的方案B中 - 用户通常会被重定向到IDP(并且在IDP的会话仍处于活动状态时自动登录而无需任何用户交互),而不是重新使用cookie。在AFDS响应后(步骤6),应用程序通常在HTTP会话中存储有关经过身份验证的用户的信息,并在用户注销或关闭浏览器后清除所有内容。

但你的方法绝对可行。如果用户清除cookie,您只需使用ADFS初始化新的SAML身份验证请求。这里的关键是ADFS不应要求用户对每个请求进行身份验证,但只要ADFS会话保持有效,它就应该立即使用SAML令牌返回到TMS,因此用户通常只需要在一次请求中进行一次身份验证。而