我们有大约十几个内部管理网络应用程序(主要是 Java)供员工用于各种工作流程,每个应用程序都有自己不同的登录/身份验证系统。我被要求在一个单一的登录系统下将它们全部联合起来。我收到了下图作为起点:
如您所见,每个应用程序都使用 CAS 客户端连接到 CAS 服务器。该服务器还具有配置了 Shibboleth 插件(?)的 Apache httpd。然后,此 CAS 服务器与我们的 Active Directory(“AD”)服务器通信。
我需要确保我完全理解这些技术如何协同工作:
- CAS 服务器和 Apache/Shibboleth 之间发生了什么?
- Apache/Shibboleth 和“Trust Store”之间发生了什么?
- CAS 服务器和 AD 之间正在通信什么?
- 从 CAS 服务器发回每个 CAS 客户端的 SAML2 token 中存储了什么?
- 作为 Java 开发人员,我如何使用 SAML2 token (如果身份验证失败,则缺少 token )来实际登录用户?
- 这里是否有更好的技术选择:如果有,它们是什么,为什么?请记住,所有这些都是 Java 应用程序,除了其中一个是 C#.NET 应用程序。
最佳答案
以下是您的一些回答:
首先,让我快速概述一下 CAS 客户端和 CAS 服务器之间的交互通常是如何工作的:(我不熟悉 Shibboleth 部分,所以我将其省略。)
- 用户点击应用程序网页。
- 应用程序将用户重定向到 CAS。
- CAS 使用标准 cookie 和 session 确定用户是否已登录。
- 如果用户未登录,CAS 会显示一个登录表单供用户提供登录凭据。如果用户已经登录,CAS 会跳到第 7 步。
- 然后 CAS 与 AD 交互以验证提供的凭据是否有效。
- 如果是,则 CAS 登录用户。
- 然后 CAS 将重定向回应用程序,提供票证。
- 应用程序直接调用 CAS 以验证所提供的票证。
- 如果票证有效,则 CAS 返回用户信息作为对请求的响应。
- 然后,该应用程序会为用户创建经过身份验证的 session ,可能会根据 CAS 提供的信息查找用户信息,并在适当的地方重定向它们。
现在回答您的问题:
- CAS 和 AD:CAS 将实际登录到 AD 并使用用户提供的凭据来查找和验证用户。如果您使用的是林,请确保使用正确的端口登录到全局目录,因为这很容易被忽略。
- token 的内容并不重要,因为标准 CAS 协议(protocol)会将 token 发送回 CAS 并在响应中检索用户详细信息。
- 作为开发人员,您实际上可以用 token 做的事情很少,因为它与应用程序绑定(bind)并且只能使用一次,并且出于安全原因,必须在很短的时间内使用(即,送回 CAS 进行验证)否则它将过期。
如果您主要使用 CAS 并且您有能力在您的应用程序中使用您自己的 CAS 客户端,那么 CAS 可能是一个非常好的解决方案。不幸的是,CAS 没有完整的 SAML2 支持,而是使用它自己的协议(protocol),尽管 CAS 的协议(protocol)与 SAML2 的 ARTIFACT 配置文件非常相似。如果您想与其他 SAML2 客户端集成,则需要做一些工作。
此外,如果您的 Java 应用程序碰巧使用 Spring,Spring 安全性包括开箱即用的 CAS 客户端。
编写自定义客户端也很容易,因为您可以看到协议(protocol)并不是非常复杂。
此外,虽然这需要更多的工作并且设置起来会很痛苦,但如果您的员工已经通过 Windows 登录到您的域,那么您实际上可以利用它并配置 CAS 以使用 Windows 登录信息用户已经提供而不是提示用户使用登录表单让他们重新输入他们的 Windows 凭据。
关于java - CAS 和 SAML2 SSO 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23223003/