中央认证服务(CAS)

中央认证服务(CAS)是一种用于单点登录(SSO)的开源框架。它提供了统一的认证、授权和票据管理功能,可以与多种应用程序集成。

在实现CAS单点登录之前,需要先在服务器上安装并配置CAS服务。

安装和部署CAS服务

CAS服务的安装和部署需要以下步骤:

  1. 下载CAS服务软件包,可以从官方网站下载。
  2. 解压缩软件包并将其部署到服务器上。可以使用任何Web服务器进行部署,如Apache Tomcat、Jetty或WebSphere等。这里以Tomcat作为例子。
  3. 启动Tomcat。
  4. 打开浏览器,输入http://localhost:8080/cas,应该能看到CAS的登录页面。

如果一切顺利,CAS服务已经成功部署。接下来,我们需要对其进行配置,使其与我们的应用程序集成。

配置CAS服务

CAS服务的配置需要以下步骤:

  1. 打开/etc/cas/config目录下的cas.properties文件,并对其进行编辑。
  2. 在文件中配置以下属性:
  3. cas.server.name:CAS服务的主机名。
  4. cas.serviceRegistry.initFromJson:是否从json文件中初始化服务注册表。
  5. cas.ticket.registryType:票据注册表的类型。
  6. cas.ticket.registry.redis.host:Redis服务器的主机名。
  7. cas.ticket.registry.redis.port:Redis服务器的端口。
  8. cas.ticket.registry.redis.password:Redis服务器的密码。
  9. cas.authn.jdbc.query[0].sql:用于查询用户凭据的SQL语句。
  10. 保存文件并退出。
  11. 重启Tomcat服务器。

配置完成后,我们可以开始与我们的应用程序进行集成。

集成CAS服务

集成CAS服务需要以下步骤:

  1. 在每个应用程序中安装CAS客户端库。可以从CAS官方网站上下载CAS客户端库并将其引入到应用程序中。
  2. 更新应用程序的登录和注销功能。应该将其替换为CAS提供的对应功能。
  3. 在应用程序的配置文件中,设置CAS客户端库的属性,包括CAS服务器的URL、CAS服务的主机名、以及CAS客户端应用程序的URL。
  4. 在用户登录时,调用CAS客户端库的casClient.Authentication()方法。这将通过CAS服务器进行用户认证,并返回特定于用户的TGT票据。
  5. 在其他应用程序向该用户提供服务时,调用CAS客户端库的casClient.getProxyTicketId()方法,以获取能够被用来通过CAS认证的PT票据。
  6. 在用户注销时,调用CAS客户端库的casClient.logout()方法。这将在CAS服务器上销毁该用户的TGT票据。

实例说明:

假设我们有两个Web应用程序,分别是app1app2。我们希望实现单点登录和单点注销。

  1. 在每个应用程序中安装CAS客户端库。假设我们已将CAS客户端库引入了app1app2中。
  2. 更新应用程序的登录和注销功能。我们将使用CAS提供的相应功能来替换现有的功能。

对于app1,其login.jsp页面应该包含以下代码:


/j_spring_cas_security_check> Username: 
Password: 
Submit 

对于app2,其index.jsp页面应该包含以下代码:

<% // 单点登录 String tgt = (String) request.getSession().getAttribute(tgt); if (tgt == null) { response.sendRedirect(https:///login?service= + request.getRequestURL().toString()); return; } %>

# Welcome to app2

/j_spring_cas_security_logout> Logout 

上述代码中,tgt为用户的TGT票据,在用户第一次访问app2时不存在。如果没有tgt,则将用户重定向到CAS服务器的登录页面,并在登录成功后将用户重定向回app2

  1. 在应用程序的配置文件中,设置CAS客户端库的属性。假设app1app2的配置文件中都包含以下属性:

    properties cas.server.name=CAS服务器地址 cas.server.https.port=443 cas.client.serviceUrl=https://app1.example.org cas.proxyCallbackUrl=https://app1.example.org/j_spring_cas_security_proxyreceptor cas.proxyCallbackUrl.hostnameVerifier=<空值>

    cas.server.name指定CAS服务器的主机名。cas.server.https.port指定CAS服务器的HTTPS端口。cas.client.serviceUrl指定CAS客户端应用程序的URL。cas.proxyCallbackUrl指定CAS客户端应用程序的代理回调URL。cas.proxyCallbackUrl.hostnameVerifier指定代理回调URL的主机名验证方式。在上述配置中,该属性为空。

  2. 在用户登录时,调用CAS客户端库的casClient.Authentication()方法。

    对于app1,其LoginServlet的代码应该为:

    java protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // ... casClient.Authentication(request, response); // ... }

    对于app2,将用户重定向到CAS服务器的登录页面,然后在CAS登录成功后交给CAS服务器重定向回app2,这在上面的代码中已经实现了。

  3. 在其他应用程序向该用户提供服务时,调用CAS客户端库的casClient.getProxyTicketId()方法,以获取能够被用来通过CAS认证的PT票据。

    对于app1,其ProvideServiceServlet的代码应该为:

    java protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // ... casClient.getProxyTicketId(request, response); // ... }

    对于app2,不需要调用getProxyTicketId()方法。

  4. 在用户注销时,调用CAS客户端库的casClient.logout()方法。

    对于app1,其LogoutServlet的代码应该为:

    java protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // ... casClient.logout(request, response); // ... }

    对于app2,其LogoutServlet的代码应该为:

    java protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // ... response.sendRedirect(https://<CAS服务器地址>/logout?service= + request.getRequestURL().toString()); // ... }

    对于app2,因为它不是CAS客户端应用程序,所以无法直接调用CAS客户端库的logout()方法。相反,我们将用户重定向到CAS服务器的注销页面。在注销成功后,CAS服务器将用户重定向回原始请求的URL(即app2的首页)。

至此,我们已经对CAS服务进行了安装、配置和集成,实现了单点登录和单点注销。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:中央认证服务(CAS) - Python技术站

(0)
上一篇 2023年3月27日
下一篇 2023年3月27日

相关文章

  • Oracle数据库 DGbroker三种保护模式的切换

    下面是“Oracle数据库 DGbroker三种保护模式的切换”的完整攻略: 1. DGbroker 保护模式简介 DGbroker是Oracle Data Guard中的主要管理工具,它负责管理Data Guard Broker配置文件,并可以控制Data Guard的状态,包括保护模式的设置。 Data Guard Broker提供了三种保护模式,分别是…

    database 2023年5月21日
    00
  • 使用Docker制作Python环境连接Oracle镜像

    下面是使用Docker制作Python环境连接Oracle镜像的完整攻略。 准备工作 在开始制作镜像之前,需要安装以下软件: Docker Oracle Instant Client 在安装完以上软件之后,需要先编写一个Dockerfile文件,内容如下: FROM python:3.7-slim RUN apt-get update \ &&amp…

    database 2023年5月22日
    00
  • CGI漏洞集锦

    CGI漏洞集锦完整攻略 什么是CGI CGI是Web服务器中最基本的技术之一,它是定义了Web服务器如何处理客户端请求的一种标准。通俗理解,当用户在Web浏览器上输入URL地址并访问Web服务器时,Web服务器会将请求以HTTP请求的形式传递给CGI程序。CGI程序读取请求并进行处理,最后将处理结果返回给Web服务器,Web服务器将结果返回给用户的Web浏览…

    database 2023年5月22日
    00
  • javascript动态添加表格数据行(ASP后台数据库保存例子)

    JavaScript动态添加表格数据行(ASP后台数据库保存例子) 概述 JavaScript是现代Web开发中最流行的脚本语言之一,它可以很好地处理DOM和前端交互。本文将介绍如何使用Javascript在表格中动态添加数据行,并且通过ASP后台保存到数据库中,从而实现数据的添加和保存。 准备工作 在开始之前,务必确保以下几点: 你已经掌握了HTML、Ja…

    database 2023年5月22日
    00
  • mysql下载与安装过程详解

    接下来我将为你提供完整的MySQL下载和安装攻略,并且给出两条示例说明。 下载MySQL 首先,进入MySQL官方网站:https://dev.mysql.com/downloads/mysql/ 在网页中找到“MySQL Community(GPL) Downloads”,点击进入 在“MySQL Community Server”下找到合适的版本进行下载…

    database 2023年5月18日
    00
  • Mysql数据类型与CRUD操作详细讲解

    Mysql数据类型与CRUD操作详细讲解 MySQL是一种流行的关系型数据库管理系统,常用于访问、存储和管理数据。在使用MySQL时,了解其支持的数据类型和常见的CRUD操作是非常重要的。 Mysql数据类型 MySQL支持多种数据类型,包括数值型、字符型、日期时间型等等。以下是一些常见的数据类型及其用途: INT – 整型数据,用于存储整数。 VARCHA…

    database 2023年5月18日
    00
  • 三十分钟MySQL快速入门(图解)

    三十分钟MySQL快速入门(图解)攻略 一、MySQL是什么 MySQL是一种开源关系型数据库管理系统,它能存储、管理和处理结构化数据。 二、安装MySQL 用户可以根据自己的操作系统版本,在MySQL的官网中下载对应的安装文件进行安装。下面为大家简单介绍一下在 Windows10 上安装 MySQL 8.0.23 的过程。 下载对应的 MySQL 版本安装…

    database 2023年5月22日
    00
  • Java泛型枚举Annotation接口详细解读与Eclipse发展

    Java泛型枚举Annotation接口详细解读与Eclipse发展 Java泛型 Java泛型是Java语言提供的一种机制,它可以让我们编写更加安全、更加通用的代码。泛型的核心是让我们可以在编写代码的时候指定类型参数,从而可以在编译时检查类型安全,避免在运行时出现类型转换异常等问题。 例如,我们可以定义一个泛型类,它可以接受任意类型的参数: public …

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部