中央认证服务(CAS)

yizhihongxing

中央认证服务(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日

相关文章

  • SQL 将含有字母和数字的字符串转换为数字

    将含有字母和数字的字符串转换为数字需要使用SQL中的函数进行转换,下面是完整攻略和两个实例: 1. 使用CAST函数进行转换 CAST函数将一个数据类型转换为另一个数据类型,可以用于将字符串转换为数字。具体用法如下: CAST(string AS datatype) 其中string是待转换的字符串,datatype是目标数据类型。 例如,将字符串’123’…

    database 2023年3月27日
    00
  • pymysql 插入数据 转义处理方式

    当使用pymysql向MySQL数据库中插入数据时,需要注意字符串中可能含有引号、单引号、反斜杠等特殊字符,这些字符可能导致SQL语句语法出现错误。为了避免这种情况,需要使用转义处理方式,将特殊字符转换为可以被SQL语句安全接收的形式。 以下是pymysql插入数据的转义处理方式: 使用pymysql.escape_string()函数 pymysql.es…

    database 2023年5月22日
    00
  • Virtuoso和VoltDB的区别

    Virtuoso和VoltDB是两种不同的数据库管理系统,它们在某些方面有所不同。下面将详细讲解它们的区别和优劣。 1. 数据模型和支持 Virtuoso是基于三元组模型的数据管理系统,支持关系型和图形数据库,同时也支持SPARQL查询语言。VoltDB是基于关系模型的数据管理系统,支持关系型数据库,而不支持图形数据库或NoSQL数据库。 举个例子,Virt…

    database 2023年3月27日
    00
  • Suse Linux 10中MySql安装与配置步骤

    下面是详细的攻略: Suse Linux 10中MySQL安装与配置步骤 安装MySQL 打开终端,使用以下命令安装MySQL: sudo zypper install mysql 安装完毕后,使用以下命令启动MySQL服务: sudo service mysql start 配置MySQL 使用以下命令登录MySQL服务器: mysql -u root -…

    database 2023年5月22日
    00
  • 详解sql中的参照完整性(一对一,一对多,多对多)

    SQL中的参照完整性是指关系型数据库中保证数据完整性的一种机制。它通过定义一些规则来确保在关系数据库中的数据的完整性和一致性。参照完整性的目的是确保表之间的数据一致性和正确性,从而保证数据库中的数据能够满足特定的业务需求,减少数据错误和冗余。下面将讲解SQL中的参照完整性,具体分为一对一、一对多和多对多。 一对一关系 在一对一关系中,一个表的每一行都对应着另…

    database 2023年5月21日
    00
  • CentOS7 64位安装mysql图文教程

    CentOS7 64位安装MySQL图文教程 本教程将指导您在CentOS7 64位操作系统上安装MySQL数据库,经过简单的准备,我们将通过yum包管理器完成MySQL的下载和安装,让您快速完成MySQL安装及配置。 准备工作 在开始安装MySQL之前,确保您的系统已经升级并安装了最新版的CentOS并连接到互联网。 1. 确认系统版本 首先,我们需要确认…

    database 2023年5月22日
    00
  • CentOS7下安装MongoDB数据库过程

    下面我就来为您详细讲解在 CentOS7 下安装 MongoDB 数据库的完整攻略。 准备工作 在开始前,请确保您的服务器已经安装了 CentOS7 系统,并且您已经拥有了管理员权限。如果您尚未在服务器上安装 MongoDB,请首先安装以下软件包: sudo yum install -y mongodb mongodb-server 配置 MongoDB 数…

    database 2023年5月22日
    00
  • MYSQL大小写不敏感导致用户登录异常问题

    问题描述: 在使用MYSQL数据库时,由于其默认情况下是大小写不敏感的,可能会导致一些用户在登录时遇到异常,例如用户在注册时使用“userName”作为用户名,而在登录时却使用了“username”或“USERNAME”,此时系统将无法识别用户输入的用户名,导致登录失败。因此,需要对MYSQL进行一些配置,使其大小写敏感,从而避免此问题的发生。 解决办法: …

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