CAS和SAML2 SSO通过示例

Adj*_*ion 2 java cas shibboleth single-sign-on saml-2.0

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

在此输入图像描述

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

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

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

Dav*_*idA 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提供的信息查找用户信息,并在适当的位置重定向它们.

现在问你的问题:

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

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

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

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

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