CAS单点登录原理简单介绍

1. SSO简介

1.1 单点登录定义

单点登录(Single sign on),英文名称缩写SSO,SSO的意思就是在多系统的环境中,登录单方系统,就可以在不用再次登录的情况下访问相关受信任的系统。也就是说只要登录一次单体系统就可以。计划在项目中加入单点登录,开发中,taoshop

1.2 单点登录角色

单点登录一般包括下面三种角色:

①用户(多个);

②认证中心(一个);

③Web应用(多个)。

PS:这里所说的web应用可以理解为SSO Client,认证中心可以说是SSO Server。

2. CAS简介

2.1 CAS简单定义

CAS(Center Authentication Service)是耶鲁大学研究的一款开源的单点登录项目,主要为web项目提供单点登录实现,属于Web SSO

2.2 CAS体系结构

CAS体系结构分为CAS Server和CAS Client。

这里写图片描述
PS:图来自官网

2.3 CAS原理

下面给出一张来自CAS官方的图片
这里写图片描述
CAS登录等系统分为CAS Server和CAS Client,下面,我根据我的理解稍微解释一下:

1、用户访问CAS Client请求资源

2、客户端程序做了重定向,重定向到CAS Server

3、CAS Server会对请求做认证

4、认证通过后会生成一个Ticket返回Cas Client

5、然后Cas Client就带着Ticket再次访问Cas Server,CAS Server进行Ticket验证

6、CAS Server对Ticket进行再次验证,然后通过就返回用户信息,用户拿到信息后就可以登录

看到这个过程,我们大概就能理解CAS是怎么实现的,看起来过程挺多的,不过这些过程都是CAS在后台做的

CAS单点登录

现在博客简单介绍一下,CAS Server简单部署实现,CAS是一款开源框架,目前应用比较广泛。下面简单介绍一下:
cas开源到github上,不过只有几个版本有cas release服务端,其它大部分版本都只有source源码而已,所以其它版本都需要自己编译,不想自己编译的可以下载V4.0.0版本的。
https://github.com/apereo/cas/releases/tag/v4.0.0

下载cas server之后,我们就可以简单部署一下,中间件可以用Tomcat
cas的安全机制是依靠SSL实现的,所以一般的http非安全链接不支持的,虽然是这么说,不过学习练习的话,也可以去掉https要求,下面介绍说一下:

可以先将cas-server-4.0.0-release.zip解压到Tomcat的webapp目录下面,然后需要修改一个配置文件
(1)、先修改一下cas-server-4.0.0-release的WEB-INF下面的deployerConfigContext.xml
修改前:

<!-- Required for proxy ticket mechanism. --><bean id="proxyAuthenticationHandler"class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"p:httpClient-ref="httpClient"  />

修改后,PS:加上p:requireSecure="false"

<bean id="proxyAuthenticationHandler"  class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"  p:httpClient-ref="httpClient" p:requireSecure="false"/></code>  

(2)、修改WEB-INF下面的spring-configuration文件夹下面的ticketGrantingTicketCookieGenerator.xml
修改前:

<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"p:cookieSecure="true"p:cookieMaxAge="-1"p:cookieName="CASTGC"p:cookiePath="/cas" />

修改后,PS:改为p:cookieSecure="false"

<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"p:cookieSecure="false"p:cookieMaxAge="-1"p:cookieName="CASTGC"p:cookiePath="/cas" />

(3)、修改WEB-INF下面的spring-configuration文件夹下面的warnCookieGenerator.xml
修改前:

<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"p:cookieSecure="true"p:cookieMaxAge="-1"p:cookieName="CASPRIVACY"p:cookiePath="/cas" />

修改后,PS:改为p:cookieSecure="false"


<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"p:cookieSecure="false"p:cookieMaxAge="-1"p:cookieName="CASPRIVACY"p:cookiePath="/cas" />

(4)、修改CAS默认登录jsp页面
可以注释WEB-INF\view\jsp\default\ui\casLoginView.jsp页面如下代码

<c:if test="${not pageContext.request.secure}"><div id="msg" class="errors"><h2>Non-secure Connection</h2><p>You are currently accessing CAS over a non-secure connection.  Single Sign On WILL NOT WORK.  In order to have single sign on work, you MUST log in over HTTPS.</p></div>
</c:if>

去掉Https支持要求后,就可以通过http的链接登录cas server了,用户名是casuser,密码是Mellon
PS:可以在deployerConfigContext.xml里看到配置,正规项目是实现jdbc支持

<bean id="primaryAuthenticationHandler"class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler"><property name="users"><map><entry key="casuser" value="Mellon"/></map></property></bean>

登录成功
这里写图片描述

待续...,PS:找时间继续写...

附录

PS:参考学习教程

单点登录实现方式:
单点登录的三种实现方式

SpringBoot集成Cas
SpringBoot集成CAS
Spring Boot 集成Shiro和CAS
基于Spring Boot的单点登录
springboot + shiro + cas4.2.7 实战

CAS单点登录教程:
Cas专题文章列表
测试认证方式搭建CAS
SSO之单点登录详细搭建教程
CAS实现SSO单点登录原理
使用 CAS 在 Tomcat 中实现单点登录

转载于:https://www.cnblogs.com/mzq123/p/9839862.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端跨域通信的几种方式

前言 前端通信类的问题&#xff0c;主要包括以下内容&#xff1a; 1、什么是同源策略及限制 同源策略是一个概念&#xff0c;就一句话。有什么限制&#xff0c;就三句话。能说出来即可。 2、前后端如何通信 如果你不准备&#xff0c;估计也就只能说出ajax。 3、如何创建Aja…

Luogu 3698 [CQOI2017]小Q的棋盘

BZOJ 4813 虽然数据范围很迷人&#xff0c;但是想树形$dp$没有前途。 先发现一个事情&#xff0c;就是我们可以先选择一条链&#xff0c;最后要走到这一条链上不回来&#xff0c;走到链上的点每一个只需要一步&#xff0c;而如果要走这条链之外的点&#xff0c;一个点需要走两步…

解决vue打包后静态资源路径错误的问题

vue项目完成的最后一步就是打包部署上线&#xff0c;但是打包部署的过程往往不是那么一帆风顺的&#xff0c;现将遇到问题和解决方案记录如下。 图片路径问题 起因&#xff1a; 页面中引入资源的方式往往有如下几种 * HTML标签中直接引入图片&#xff0c; 如 <img src&qu…

DOMBOM(source、methods、contents、Application)

何为DOM&#xff1f; Document Object Model Dom&#xff0c;是W3C组织推荐的处理可扩展标志语言的标准编程接口。在网页上&#xff0c;组织页面的对象被组织在一个树形结构中&#xff0c;用来表示文档中对象的标准模型就称为DOM。 可以认为DOM是页面上数据和结构的一个树形表示…

spring-注解---IOC(3)

spring--注解---IOC(3) package com.zwj.bean;public class Blue {public Blue(){System.out.println("blue...constructor");}public void init(){System.out.println("blue...init...");}public void detory(){System.out.println("blue...detory..…

在div中设置文字与内部div垂直居中

要实现如图一所示的结果&#xff1a; html代码如下&#xff1a; <!DOCTYPE html> <html><head lang"zh"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta charset"utf-8" /><title>商…

王之泰201771010131《面向对象程序设计(java)》第九周学习总结

第一部分&#xff1a;理论知识学习部分 第7章异常、日志、断言和调试 概念&#xff1a;异常、异常类型、异常声明、异常抛出、 异常捕获1.异常处理技术2.断言的概念及使用3.基本的调试技巧 1&#xff09;异常的概念 a.Java的异常处理机制可以控制程序从错误产生的 位置转移到能…

Java学习——使用Static修饰符

程序功能&#xff1a;通过两个类 StaticDemo、LX4_1 说明静态变量/方法与实例变量/方法的区别。 package Pack1;public class Try {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("静态变量x"StaticDemo.getX());非…

JavaScript从入门到精通之入门篇(一)概念与语法

入门篇大纲 第一部分 概念与语法 1.JavaScript的历史 2.基本概念 3.JavaScript的使用、调试和异常处理 4.基本词法和变量 5.数据类型和类型转换 6.运算符 算数运算符 赋值运算符 一元运算符 使用一元运算符&#xff0c;将会把所有的内容转换为数值运算&#xff0c;不…

【小记】-005--纯CSS实现的小玩意儿

效果图奉上 代码奉上 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible&q…

JavaScript从入门到精通之入门篇(二)函数和数组

入门篇大纲 第二部分 函数与数组 1.函数 函数的定义 普通函数 function 函数名 &#xff08;表达式1…&#xff09; { 代码块 }js是解释性语言&#xff0c;在当前script标签代码执行的开始阶段&#xff0c;就会将普通函数放入堆中&#xff0c;也只是将引用放入堆中&#xf…

一道Python面试题

无意间&#xff0c;看到这么一道Python面试题&#xff1a;以下代码将输出什么&#xff1f; def testFun(): temp [lambda x : i*x for i in range(4)] return temp for everyLambda in testFun(): print (everyLambda(2))脑中默默一想&#xff0c;这还用说么&#xff0c;肯定是…

Windows下的ssh姐妹花 Xshell 和 Xftp

Windows下的ssh姐妹花 Xshell 和 Xftp 今天是3月8号&#xff0c;中国传统的三八妇女节&#xff0c;是距离中国新兴节日三七女生&#xff08;神&#xff09;节最近的一个全国性节日&#xff0c;今天我也是宅在家&#xff0c;研究了一下近日工作上遇到的一个纯软件技术问题。废话…

关于数字证书理解的简单整理以及12306站点证书简单分析

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/sundacheng1989/article/details/25540601 首先简单理解一下什么是数字证书。这里是一篇英文文档&#xff0c;描写叙述的非常形象。形象的描写叙述了什么是公钥。什么是私钥。…

Mac中安装Node和版本控制工具nvm遇到的坑

首先说说常规的安装 1. 下载nvm,使用nvm来管理Node版本 官方文档 windows 版本  https://github.com/coreybutler/nvm-windows mac 版本    https://github.com/creationix/nvm#install-script 命令行 尽量不要用brew&#xff0c;免得掉坑 curl -o- https://raw.githubu…

wepy - 与原生有什么不同(x.wpy)使用实例

源码 1 <template>2 <view classmark wx:if"{{showMark}}">3 <view animation"{{animationData}}" class"animCat">4 <image src"http://osk1hpe2y.bkt.clouddn.com/18-5-30/34559443.jpg"></…

CSS实现div梯形分割

原理 使用的border边框属性结合svg 转换 详见代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>css实现div边框斜角</title><style type"text/css"> .labels {display: i…

算法学习——决策单调性优化DP

update in 2019.1.21 优化了一下文中年代久远的代码 的格式…… 什么是决策单调性&#xff1f; 在满足决策单调性的情况下&#xff0c;通常决策点会形如1111112222224444445555588888..... 即不可能会出现后面点的决策点小于前面点的决策点这种情况。 那么这个性质应该如何使用…

SVG画一个箭头

参考菜鸟手册&#xff1a; https://www.runoob.com/svg/svg-tutorial.html 打开菜鸟中的在线工具 在可视化截图拖拉元素绘制箭头 点击command U 查看源码 将源码拷入html代码中&#xff0c;查看效果 最后&#xff0c;贴出源码供大家参考 <!DOCTYPE html> <…

数字签名与HTTPS详解

因为HTTP协议本身存在着明文传输、不能很好的验证通信方的身份和无法验证报文的完整性等一些安全方面的确点&#xff0c;所以才有了HTTPS的缺陷。HTTPS确切的的说不是一种协议&#xff0c;而是HTTP SSL (TSL)的结合体。HTTP报文经过SSL层加密后交付给TCP层进行传输。SSL(安全套…