单点登录CAS学习(一):初识单点登录

2023-10-27

一、单点登录应用场景

不少业主单位随着自身的发展,建立不少业务支撑系统,往往会采用不同的开发商进行系统开发和建设,因此必然形成如下一种局面:工作人员需要登录多个业务系统才能将自己的工作全部完成,给工作人员带来了额外的负担。

因此单点登录变应运而生了,它解决了多个系统都要登陆的问题,只需要打开一个系统时,进行登录(单点登录),就可以自由切换其他的系统。

二、单点登录的框架

         目前广泛使用的单点登录框架是CAS框架,CAS是SSO解决方案里面比较成熟的架构,是耶鲁大学发起的一个开源架构,其旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:

  1. 开源的企业级单点登录解决方案。
  2. CAS Server 为需要独立部署的 Web 应用。
  3. CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。

下图是 CAS 最基本的协议过程:

 

CAS协议过程

  1. 访问服务:SSO客户端发送请求访问应用系统提供的服务资源。
  2. 重定向认证:SSO客户端会重定向用户请求到SSO服务器。
  3. 用户验证:用户身份认证。
  4. 生成票据:SSO服务器会产生一个随机的Service Ticket。
  5. 验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。
  6. 传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。

 

三、学习实践的内容

  1. 搭建单点登录框架
  2. 通过数据库进行单点登录的验证
  3. 模拟多个客户端进行接入
  4. 对接入进行管理

 

四、本篇的学习实践内容

     本篇主要是解决上面时候的第一个任务:搭建单点登录框架,初步了解CAS。主要要完成如下内容:

  1. 进行域名映射
  2. 下载CAS工程并进行编译
  3. 准备认证证书
  4. 修改jdk和tomcat
  5. 配置浏览器支持https

 

五、准备工作详细步骤

5.1 域名映射

修改windows的hosts文件,添加cas服务端域名server.cas.com和两个客户端应用的域名

App1.cas.com和 app2.cas.com

在最后面添加下面三行

127.0.0.1 server.cas.com

127.0.0.1 app1.cas.com

127.0.0.1 app2.cas.com

保存后退出。

5.2 下载CAS工程并编译

https://github.com/apereo/cas-overlay-template/tree/5.3  从这个url直接打开cas的5.3版本url, 我使用时最新的已经是6.1版本(工程组织方式从maven 变成了 gradle,打包方法发生了变化)

在下图中的红框处,选择要下载的版本和进行压缩包下载。

下载后,将压缩文件解压后,结构如下:

打开CMD窗口后,进入到上面的目录,执行 mvn clean package  这个命令的意思进行打包

注意:这里会比较慢,需要耐心等待。

执行这个步骤的目的是生产一个cas.war包, 可以放到tomcat中运行。经过长时间的等待终于编译成功,如下图

编译成功后,在目录下生成一个target目录,在这里会有一个war包,此war包可以放到tomcat工程里面

5.3 准备证书

tomcat通过https访问话,需要有证书,借助jdk的工具keytool来进行证书的生成。

5.4 生成keystore

通过cmd窗口,进入放置证书文件的目录,比如 e:/tmp/tomcat-key/

 

keytool -genkey -alias tomcat -keyalg RSA -validity 3650 -keystore e:/tmp/tomcat-key/tomcat.keystore

这里的密钥可以用自己设置的,本例中用 123456

生成后检查该路径:

5.5 根据keystore生产crt文件

#输入第一步中keystore的密码changeit

keytool -export -alias tomcat -file e:/tmp/tomcat-key/tomcat.cer -keystore e:/tmp/tomcat-key/tomcat.keystore -validity 3650

5.6 修改jdk和tomcat

5.6.1 信任授权文件到jdk

首先确定一下jdk的目录,本例如下:

证书库cacerts的缺省口令是 changeit

keytool -import -keystore  C:/Java/jdk1.8.0_152/jre/lib/security/cacerts -file E:\tmp\tomcat-key/tomcat.cer -alias tomcat -storepass changeit

 

这样证书已经准备好并授权到jdk1.8了

5.6.2 修改tomcat 配置

进入要部署的tomcat 目录,本例中使用的是tomcat 8,目录C:\Java\apache-tomcat-8.5.34,如下图:

下面需要修改tomcat 的sever.xml文件,这个文件在tomcat下得conf目录里

默认是开启8080端口,http协议,在这个配置下面添加如下配置:

    <Connector port="8080" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443" />

              

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"

           maxThreads="200" SSLEnabled="true" scheme="https"

           secure="true" clientAuth="false" sslProtocol="TLS"

           keystoreFile="E:\tmp\tomcat-key\tomcat.keystore"

           keystorePass="123456"/>

如下图:

配置完成后保存。

5.7 配置浏览器支持https

在chrome中管理证书,进入配置界面->选择高级->管理证书

点击右边的管理按钮,弹出导入界面

根据导入提示一步一步进行,选择前面制作的证书,导入。

六、检验准备工作

6.1 部署

将CAS工程编译后的结果 cas.war 部署到tomcat 环境下,在tomcat的webapps目录下新建一个cas目录,将cas.war 拷贝到这个cas目录

C:\Java\apache-tomcat-8.5.34\webapps\cas

6.2 运行并检验

将tomcat目录下的startup.bat 运行起来(如果是linux的运行startup.sh),看到运行日志如下:

端口8443已经就绪,启动startup 完成。打开chrome ,访问https://server.cas.com:8443/cas/login 如果出现提示,点击高级/详细信息,继续访问。 

 

旁边Static Authentication 提示你:你现在只有一个写死的用户默认账号: 默认密码:Mellon 仅有这一个用户,目前这个服务端只能看看,没什么实际用途。建议您将CAS连接到LDAP、JDBC等。

登陆成功后,界面如下:

以上就是单点登录的第一部分的学习和实践内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单点登录CAS学习(一):初识单点登录 的相关文章

  • 在Maven中前端构建实践

    NodeJS为前端技术的发展带来了一次革新 层出不穷的前端库 框架以及打包工具让大家应接不暇 然而这使得前端技术越来越依赖于NodeJS 基于NodeJS编写的前后台项目可以使用同一编译或者打包工具进行管理从而做到无缝的前后端版本控制以及联
  • cas TicketValidationException 未能够识别出目标 ‘ST-1-UxVA37oEE-qN-S0NNZclYXsXxFQSD-20200510PZSQ‘票根

    原因 超时了 解决 去掉debug再测试一下
  • style-components的熟练运用

    安装 首先下一个包 npm install save styled components 使用 创建组价以及根据属性加样式 import React Component from react import styled from style
  • 如何设计一个麻雀般的微型分布式架构?

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由mariolu 发表于云 社区专栏 序言 初衷 设计该系统初衷是基于描绘业务 或机器集群 存储模型 分析代理缓存服务器磁盘存储与回源率的关系 系统意义是在腾讯云成本优化过程中
  • 访谈:小学学历的程序员自主研发出框架级产品

    提到许松森 也许你并不知道他是谁 在Google中敲入这个名字 能找到的结果也寥寥无几 那么做为我们这一期采访的主角 他究竟是用什么在吸引着我们呢 打开许松森的blog 开篇就是 我的悲惨人生 读在字里行间 对他在逆境中的自我成长很是敬佩
  • mybatis之foreach用法

    在做mybatis的mapper xml文件的时候 我们时常用到这样的情况 动态生成sql语句的查询条件 这个时候我们就可以用mybatis的foreach了 foreach元素的属性主要有item index collection ope
  • Weex 介绍

    文章目录 一丶Weex的介绍 二丶前置知识 三丶适用人群 四丶Weex的优势 五丶难点 六丶Weex ReactNative Flutter的区别 七丶设计理念 八丶基本原理 九丶有谁在用 十丶Weex调试工具 十一丶构建一个最简单的应用
  • MyBatis 学习笔记(四)---源码分析篇---配置文件的解析过程(一)

    概述 前几篇我们介绍了MyBatis的一些基本特性 对MyBatis有了个初步了解 接下来 我们将着手来分析一下MyBatis的源码 从源码层面复盘MyBatis的执行流程 思维导图概括 配置文件解析过程分析 有了上述思维导图 我们对配置文
  • SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询

    摘要 本文我们将继续分享介绍Spring Boot在整合Mybatis开发企业级应用时其他典型的业务场景 即Mybatis是如何实现多表关联查询时将查询结果集与对象进行映射的 主要的内容包含 一对一的表关联 和 一对多 多对多的表关联 查询
  • 封装的几种形式

    你说的时cpu的封装吗 供你参考 集成电路芯片的封装形式 自从美国Intel公司1971年设计制造出4位微处a理器芯片以来 在20多年时间内 CPU从Intel4004 80286 80386 80486发展到Pentium和Pentium
  • 10分钟带你了解轻量级插件框架x3py

    写在前面 由于本人目前主要从事的是Windows客户端开发方面的工作 所以本文介绍x3py的侧重点也是从客户端程序开发者方面叙述的 本文主要参考整理自x3py的官方Wiki 修正了一些官方示例中的错误 有兴趣的同学可以直接阅读原文 设计目的
  • 值得学习与推荐的c/c++框架和函数库

    这几天不上班 翻翻Evernote中记录的一些笔记 刚好有时间把记录的一些好玩链接转载一下 这篇文章里提到的很多库都用过 尤其是图像处理相关库 尤其是opencv及cximage 当时做图像算法时 很多算法就是从上面找来 然后自己修改的 比
  • 如何在Spring的CAS服务属性中正确设置服务URL

    当使用 Spring Security CAS 时 我总是遇到发送到 CAS 的回调 URL 即服务属性 的小障碍 我看过很多例子 例如this and this但它们都使用硬编码的 URL 甚至Spring 的 CAS 文档 典型的剪辑看
  • 如何使用 Devise 将 Rails 应用程序转变为 SSO/CAS 服务器?

    我从一个上一个问题我一直在问错误的问题 我想将我的应用程序变成 CAS 服务器 以便应用程序的管理员可以使用相同的身份验证机制来登录我们为组织开发的其他应用程序 你以前做过这个吗 是否有一个插件可以增加 Devise 充当 CAS 服务器的
  • 通过 JMH 测量 sun.misc.Unsafe.compareAndSwap 中的奇怪行为

    我决定使用不同的锁定策略来测量增量 并为此使用 JMH 我使用 JMH 来检查吞吐量和平均时间 并使用简单的自定义测试来检查正确性 有六种策略 原子数 读写锁定计数 与易失性同步 无易失性的同步块 sun misc Unsafe compa
  • 当 Apache Web 服务器使用 mod_jk 连接 Tomcat 时启用 SSL

    I have usr local tomcat webapps cas 我的 java 应用程序正在运行 当我尝试连接 Tomcat 和 Apache Web 服务器 httpd 之后http 192 168 0 117 cas我可以看到登
  • 如何将CAS认证与Spring Security集成?

    我已将 spring security 集成到我的项目中 并且之前使用 hibernate 验证用户详细信息 现在我必须使用 CAS 来完成它 这是我当前的 Spring security xml
  • 如何将 AngularJS 路由与 CAS 身份验证重定向一起使用,或者 Angular 不可用?

    我的应用程序通常使用以下路由 http angularapp com page bannanas http angularapp com page bannanas 但是 如果用户未经过身份验证 则用户将被重定向到 CAS 登录页面 然后登
  • jasig cas 重定向过多问题

    我正在尝试使用 spring security 和 spring security cas 带有 Jasig CAS 的 SSO 来保护 spring boot Web 应用程序 尝试访问受保护的资源时 我遇到了太多重定向错误 该项目可用h
  • 使用 django-cas-ng 在管理站点上进行身份验证

    我在用着Django Cas NG https github com mingchen django cas ng用于验证用户身份的框架 主要问题是管理页面仍然使用默认的登录视图 到目前为止使用的方法 1 使用环境变量 来自文档 CAS A

随机推荐

  • MySQL数据管理

    一 外键的创建 方法1 在创建表的时候 增加约束 这个方法比较复杂麻烦 CREATE TABLE grade gradeid INT 10 NOT NULL AUTO INCREMENT COMMENT 年级id gradename VAR
  • 《计算机网络》谢希仁第七版课后答案完整版

    文章目录 第一章 概述 1 01 计算机网络向用户可以提供那些服务 1 02 简述分组交换的要点 1 03 试从多个方面比较电路交换 报文交换和分组交换的主要优缺点 1 04 为什么说因特网是自印刷术以来人类通信方面最大的变革 1 05 因
  • c语言——找零问题

    某人购买物品一共花了x元 x lt 100 用100元现金去支付 售货员需要找零 请设计程序给出一个找零方案 并使找零的张数最少 设现有人民币面值包括 100元 50元 20元 10元 5元 1元 5角和1角 当x包含1角以下的金额时 按照
  • Arduino基本知识

    1 程序结构 2 变量 局部变量和全局变量 3 调用Arduino的函数 4 通过点亮led IO设置为输出模式 学习pinMode 和digitalWrite 5 按键开关 IO设置为输入模式 6 初识赋值运算符和逻辑运算符 和布尔类型
  • uni-popup使用uni-grid显示错误问题

    在uni popup中 使用了uni grid 内部item显示错误 重叠 解决方式 为item设置style 比如我设置的列数是4 那么style中的width设置为25 item中的文字也需要设置宽度 否则文字方向不对 原因 暂时未知
  • c语言 教学目标,c语言选择结构程序设计教学目标

    c语言选择结构程序设计教学目标 选择结构程序设计 教学目标 能力要求 a 能够使用 if 语句编写条件选择程序 b 能够使用嵌套 if 语句和 switch 语句编写多分支选择结构程序 基础能力落实 1 判断一个数的正 负 输出相应信息 2
  • C++11 -- 类的新功能

    文章目录 类的新功能 默认成员函数 类成员变量初始化 强制生成默认函数的关键字default 禁止生成默认函数的关键字delete 继承和多态中的final和override关键字 类的新功能 默认成员函数 原来在C 类中 有6个默认成员函
  • 爬虫IP列表

    百度爬虫IP列表220 181 51 180 149 130 123 125 71 180 76 5 66google爬虫列表67 221 235 66 249 68 66 249 67 203 208 60 66 249 72 66 24
  • 目标检测中计算图像的交并比(IOU)

    交并比为目标检测中一个重要的概念 来进行预测框 ground truth 与标注框的重合率来对检测的正确率进行比较 图示如下 交并比计算公式 I O U C
  • 被攻击了使用高防服务器有用吗?业务放在高防服务器里面还会不会被攻击?

    高防服务器和无防服务器最大的区别就是在于防火墙 而且怎么样的防火墙可以防止攻击呢 防火墙是网络基础设施中用于网络安全的设备 是用于网络安全的第一道防线 高防防火墙是硬件组成 防火墙的作用是检查通过防火墙的数据包并根据预设的安全策略决定数据包
  • 云计算与大数据作业

    第一章 云计算 云计算的定义 维基百科 云计算是一种动态扩展的计算模式 通过计算机网络将虚拟化的资源作为服务提供给用户 什么是云计算 像水 电 煤 资源性产品 一样利用你的IT资源 计算机存储网络资源 关键词 按需使用 超大规模 高弹性 定
  • Pycharm社区版安装Django并完成Python入门到实践Django实验

    安装流程 首先 随便打开一个项目 然后在pycharm界面的左下角有Terminal终端的图标 点开 在命令行里进入想要的目录 我进的是cd C Users yasuo Desktop py 建立虚拟环境 在这个目录下输入python m
  • Intent见解

    今天做了一个很有意思的实验 三个程序的关系如图 1 先上3个代码 ActionAttr java文件 package org crazyit intent import android app Activity import android
  • 《深入剖析tomcat》读书笔记3--servlet容器

    主要是 深入剖析tomcat 的第五章和第十一章 个人觉得如下3点是关键 1 pipeline相关概念及其执行valve的顺序 2 standardwrapper的接受http请求时候的调用序列 3 standardwrapper基础阀加载
  • Redis 事务 - 监控测试

    Redis 基本事务操作 Redis事务本质 一组命令的集合 一个事务中的所有命令都会被序列化 在事务执行过程的中 会按照顺序执行 Redis事务是一组Redis命令的有序集合 这些命令在事务中按照顺序执行 但在事务执行过程中不会立即执行
  • Python之第十二章 处理Excel电子表格

    一 Excel文档 工作薄 xlsx文件 包含多个表 工作表 活动表 用户当前查看的表 关闭Excel前最后查看的表 二 安装openpyxl模块 import openpyxl 三 读取Excel表格 先制作一张例表1 xlsx 1 用o
  • Oracle数据库问题汇总

    Oracle自动维护任务 周日上午六点数据库报警 报ORA 1652错误 根据微信告警信息及告警时间点确认是Oracle自动维护任务启动 导致临时表空间不足 SQL Tuning Advisor这个自动任务很早就是要禁用掉的 本身数据库仅作
  • 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。

    示例 1 输入 nums 1 2 3 1 输出 true 示例 2 输入 nums 1 2 3 4 输出 false 示例 3 输入 nums 1 1 1 3 3 4 3 2 4 2 输出 true 实现代码 public class So
  • new String和String直接赋值的区别

    栈区存引用和基本类型 不能存对象 而堆区存对象 是比较地址 equals 比较对象内容 在hotspot虚拟机中 jdk1 8之后 String常量池是在堆中的 单纯的String str aaa 是从虚拟机栈中的变量直接指向String常
  • 单点登录CAS学习(一):初识单点登录

    一 单点登录应用场景 不少业主单位随着自身的发展 建立不少业务支撑系统 往往会采用不同的开发商进行系统开发和建设 因此必然形成如下一种局面 工作人员需要登录多个业务系统才能将自己的工作全部完成 给工作人员带来了额外的负担 因此单点登录变应运