中间件学习-CAS实现单点登录

中间件学习-CAS实现单点登录

Demo搭建

https://github.com/apereo/cas-overlay-template/tree/5.3
首先从网址获取demo模板,5.3之后的都是gradle项目,所以这里下载5.3版本
通过cmd命令执行 build.cmd run命令会生成target目标文件夹
在根目录新建src/main/resources目录
将target\cas\WEB-INF\classes 下生成的services文件夹和application.properties配置文件复制到src/src/main/resources目录

  1. 修改services下HTTPSandIMAPS-10000001.json文件;将第三行改为 “serviceId” : "^(https|http|imaps)

  2. 修改application.properties;
    #server.ssl.key-store=file:etc/cas/thekeystore
    #server.ssl.key-store-password=changeit
    #server.ssl.key-password=changeit
    将三行全部注释

在这里插入图片描述

  1. 再将application.properties最后一行注释
    #cas.authn.accept.users=casuser::Mellon

在这里插入图片描述

  1. application.properties添加如下
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true
cas.serviceRegistry.json.location=classpath:/services
#查询账号密码sql,必须包含密码字段
cas.authn.jdbc.query[0].sql=select * from sys_user where username=?
#指定上面的sql查询字段名(必须)
cas.authn.jdbc.query[0].fieldPassword=password
#指定过期字段,1为过期,若过期需要修改密码
cas.authn.jdbc.query[0].fieldExpired=expired
#为不可用字段段,1为不可用,
cas.authn.jdbc.query[0].fieldDisabled=disabled
#数据库方言hibernate的知识
cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect
#新mysql数据库驱动
cas.authn.jdbc.query[0].driverClass=com.mysql.cj.jdbc.Driver
#数据库驱动
#cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
#数据库连接
cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/cas?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
#数据库用户名
cas.authn.jdbc.query[0].user=admin//你的数据库user
#数据库密码
cas.authn.jdbc.query[0].password=admin//你的数据库密码
#默认加密策略,通过encodingAlgorithm来指定算法,默认NONE不加密
cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT
cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5

这样配置是不用生成证书以及配置https;而http就可以访问;通过数据库读取用户名及密码

数据库mysql

数据库名cas
我的mysql数据库是驱动是com.mysql.cj.jdbc.Driver;低版本的需要注意
DDL如下

CREATE TABLE `sys_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `expired` int(11) DEFAULT NULL,
  `disabled` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

INSERT INTO `sys_user` VALUES ('1', 'admin', '21232f297a57a5a743894a0e4a801fc3', '0', '1');
INSERT INTO `sys_user` VALUES ('2', 'user', 'ee11cbb19052e40b07aac0ca060c23ee', '1', '0');
INSERT INTO `sys_user` VALUES ('3', 'root', '63a9f0ea7bb98050796b649e85481845', '0', '0');

服务器使用

完成以上配置后就可以启动服务端;cmd执行 build.cmd run即可
在这里插入图片描述

启动时间较长,当看到ready 的 slogan就可以访问localhost:8443/cas/进入登录界面
在这里插入图片描述
分别尝试三个账户登录,root、user、admin账户密码相同,看到不同情况
root账户能够正常登录,那么服务端就成功了
在这里插入图片描述

Client客户端

从start.spring.io新建一个工程

pom.xml

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>net.unicon.cas</groupId>
			<artifactId>cas-client-autoconfig-support</artifactId>
			<version>2.3.0-GA</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies>

application.properties文件

server.port=8085
#cas服务端的地址
cas.server-url-prefix=http://localhost:8443/cas
#cas服务端的登录地址
cas.server-login-url=http://localhost:8443/cas/login
#客户端访问地址
cas.client-host-url=http://localhost:8085
cas.validation-type=CAS3

新建一个controller

@RestController
public class CasController {

    @RequestMapping("/hello")
    public String hello() {
        return "hello CAS";
    }
}

在@SpringBootApplication注解下添加@EnableCasClient注解

运行程序访问localhost:8085/hello
会跳转到localhost:8443进行登录

在这里插入图片描述
输入用户名密码后登录成功自动跳转到
在这里插入图片描述
再次访问,就不会跳转了,可以直接访问
在这里插入图片描述
说明:当关闭浏览器后登录信息才会失效,

简介

单点登录英文全称是:Single Sign On,简称SSO
含义:在多个相互信任的系统中,只要登录一个系统其他系统均可访问。

CAS 是一种使用广泛的单点登录实现,分为客户端CAS Client和服务端 CAS Service,客户端就是我们的系统,服务端是认证中心,由CAS提供,我们需要稍作修改,启动起来就可以用

下图是网上流传的经典示意图
在这里插入图片描述

文章参考

https://www.jb51.net/article/189201.htm
https://zhuanlan.zhihu.com/p/25007591
http://www.micmiu.com/enterprise-app/sso/sso-cas-sample/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值