CAS和SAML2 SSO通过示例

时间:2014-04-22 14:52:23

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

我们有大约十二个内部管理员网络应用程序(主要是Java),员工可以使用这些应用程序进行各种工作流程,并且每个人都有自己的,不同的登录/身份验证系统。我被要求在一个单一的唱歌系统下将它们联合起来。我将以下图表作为起点使用:

enter image description here

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

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

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

1 个答案:

答案 0 :(得分:6)

以下是您的一些答案:

首先,让我快速概述一下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提供的信息查找用户信息,并在适当的位置重定向。
  11. 现在提出您的问题:

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

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

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

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

    此外,虽然设置起来有点麻烦,但是如果您的员工已经通过Windows登录到您的域名,那么您实际上可以捎带并配置CAS以使用Windows登录信息用户已经提供而不是提示用户使用登录表单,使他们重新输入他们的Windows凭据。