【问题标题】:CAS and SAML2 SSO by exampleCAS 和 SAML2 SSO 示例
【发布时间】:2014-06-07 00:42:03
【问题描述】:

我们有大约十几个内部管理 Web 应用程序(主要是 Java)供员工用于各种工作流程,并且每个应用程序都有自己不同的登录/身份验证系统。我被要求在一个单一的单唱系统下将它们联合在一起。我收到了以下图表作为起点:

如您所见,每个应用程序都使用 CAS 客户端连接到 CAS 服务器。该服务器还具有配置了 Shibboleth 插件 (?) 的 Apache httpd。然后,此 CAS 服务器与我们的 Active Directory (“AD”) 服务器进行通信。

我需要确保我完全了解这些技术如何协同工作:

  • CAS 服务器和 Apache/Shibboleth 之间发生了什么?
  • Apache/Shibboleth 和“Trust Store”之间发生了什么?
  • CAS 服务器和 AD 之间的通信是什么?
  • 从 CAS 服务器发送回每个 CAS 客户端的 SAML2 令牌中存储了什么?
  • 作为 Java 开发人员,我如何使用 SAML2 令牌(如果身份验证失败,则缺少该令牌)来实际登录用户?
  • 这里有没有更好的技术选择:如果有,它们是什么,为什么?请记住,所有这些都是 Java 应用,除了其中一个是 C#.NET 应用。

【问题讨论】:

    标签: java single-sign-on cas saml-2.0 shibboleth


    【解决方案1】:

    以下是您的一些答案:

    首先,让我快速概述一下 CAS 客户端和 CAS 服务器之间的交互通常是如何工作的:(我不熟悉 Shibboleth 部分,所以我将其省略。)

    1. 用户点击应用程序网页。
    2. 应用程序将用户重定向到 CAS。
    3. CAS 使用标准 cookie 和会话来确定用户是否已经登录。
    4. 如果用户未登录,CAS 会显示一个登录表单,供用户提供登录凭据。如果用户已经登录,CAS 会跳到第 7 步。
    5. CAS 然后与 AD 交互以验证提供的凭据是否有效。
    6. 如果是,则 CAS 登录用户。
    7. 然后 CAS 将重定向回应用程序,提供票证。
    8. 应用程序直接调用 CAS 以验证提供的票证。
    9. 如果票证有效,则 CAS 会返回用户信息作为对请求的响应。
    10. 然后应用程序为用户创建一个经过身份验证的会话,可能会根据 CAS 提供的信息查找用户信息,并将它们重定向到适当的位置。

    现在回答你的问题:

    • CAS 和 AD :CAS 将实际登录到 AD 并使用用户提供的凭据来查找和验证用户。如果您使用的是森林,请确保使用正确的端口登录全局目录,因为这很容易错过。
    • 令牌的内容并不重要,因为标准 CAS 协议会将令牌发送回 CAS 并在响应中检索用户详细信息。
    • 作为开发人员,您对令牌几乎无能为力,因为它与应用程序绑定,只能使用一次,而且出于安全原因,必须在很短的时间内使用(即发回 CAS 进行验证),否则将过期。

    如果您主要使用 CAS,并且您有能力在您的应用程序中创建自己的 CAS 客户端,那么 CAS 可能是一个非常好的解决方案。不幸的是,CAS 没有完全支持 SAML2,而是使用它自己的协议,尽管 CAS 的协议与 SAML2 的 ARTIFACT 配置文件非常相似。如果您想与其他 SAML2 客户端集成,则需要做一些工作。

    此外,如果您的 Java 应用程序碰巧使用 Spring,Spring 安全性包括开箱即用的 CAS 客户端。

    编写自定义客户端也很容易,因为您可以看到协议并不是非常复杂。

    此外,虽然这需要更多的工作并且设置起来可能会很痛苦,但如果您的员工已经通过 Windows 登录到您的域,那么您实际上可以搭载它并将 CAS 配置为使用 Windows 登录信息用户已经提供而不是提示用户使用登录表单让他们重新输入他们的 Windows 凭据。

    【讨论】:

    • 真棒,真棒,非常有帮助的答案。谢谢@DavidA (+1)!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 2021-11-12
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多