背景
- 企业开始进行信息化建设,搭建了一套业务系统A。通过用户名密码就可以登录。
- 随着业务的发展,又搭建了业务系统B、业务系统C、业务系统D……,每套系统都需要登录、输入各自的用户名密码,记忆成本高。
- 通过打通数据层,共用底层用户数据,统一不同业务系统的鉴权机制,实现了登录所有系统用一套用户名密码即可。
- 但是每套系统都得登录一遍,操作起来还是麻烦,可以不可以只登录一次就行了?
SSO单点登录应运而生,所有新技术的变革都是解决某项用户需求痛点。
CAS和SSO
单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
CAS全称为Central Authentication Service,即中央认证服务,是一个企业多语言单点登录的解决方案,并努力去成为一个身份验证和授权需求的综合平台。
CAS原理
流程图
用户首次登录时流程如下:
1.用户浏览器访问系统A需登录受限资源。
2.系统A发现该请求需要登录,将请求重定向到认证中心,进行登录。
3.认证中心呈现登录页面,用户登录,登录成功后,认证中心重定向请求到系统A,并附上认证通过令牌。
4.系统A与认证中心通信,验证令牌有效,证明用户已登录。
5.系统A将受限资源返给用户。
已登录用户首次访问应用群中系统B时:
-
浏览器访问另一应用B需登录受限资源。
-
系统B发现该请求需要登录,将请求重定向到认证中心,进行登录。
-
认证中心发现已经登录,即重定向请求响应到系统B,附带上认证令牌。
-
系统B与认证中心通信,验证令牌有效,证明用户已登录。
- 系统B将受限资源返回给客户端。
GItHub地址:https://github.com/apereo/cas-overlay-template
必要依赖
<dependencies>
<!--mysql-->
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-jdbc</artifactId>
<version>${cas.version}</version>
</dependency>
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-jdbc-drivers</artifactId>
<version>${cas.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>
<!-- Custom Authentication -->
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-core-authentication-api</artifactId>
<version>${cas.version}</version>
</dependency>
<!-- Custom Configuration -->
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-core-configuration-api</artifactId>
<version>${cas.version}</version>
</dependency>
<!--开启cas server的rest支持-->
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-rest</artifactId>
<version>${cas.version}</version>
</dependency>
<!--Shiro核心框架 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.1</version>
</dependency>
</dependencies>