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…

T4((Text Template Transformation Toolkit))模版引擎之基础入门 C#中文本模板(.tt)的应用...

1 关于C#中文本模板(.tt)的简单应用https://blog.csdn.net/zunguitiancheng/article/details/78011145 任何一个傻瓜都能写出计算机能理解的程序&#xff0c;而优秀的程序员却能写出别人能读得懂的程序。—— Martin Fowler 2 T4模版引擎之生成数据库实体类 http://www.cnblogs…

LeetCode412Fizz Buzz

写一个程序&#xff0c;输出从 1 到 n 数字的字符串表示。 1. 如果 n 是3的倍数&#xff0c;输出“Fizz”&#xff1b; 2. 如果 n 是5的倍数&#xff0c;输出“Buzz”&#xff1b; 3.如果 n 同时是3和5的倍数&#xff0c;输出 “FizzBuzz”。 示例&#xff1a; n 15, 返回: [ …

vue+node实现中间层同步调用接口

为了应对业务的复杂性&#xff0c;提高前端的渲染能力&#xff0c;故在项目中引入nodejs做中间层&#xff0c;前端承接vue&#xff0c;后端对接Java。 至于为什么这么搞&#xff0c;网上有好多文章都在讨论&#xff0c;可以说仁者见仁智者见智&#xff0c;这里我们不在深究。 …

ES6学习笔记(二十二)ArrayBuffer

ArrayBuffer ArrayBuffer对象、TypedArray视图和DataView视图是 JavaScript 操作二进制数据的一个接口。它们都是以数组的语法处理二进制数据&#xff0c;所以统称为二进制数组。 二进制数组由三类对象组成。 &#xff08;1&#xff09;ArrayBuffer对象&#xff1a; 代表内存之…

如何正确地使用Java的@deprecated标注

没有什么事情比看到一个没有任何说明的deprecated标注更让人愤怒的事情了。这种做法只能让人困惑&#xff0c;我到底还要不要用这个已经‘废弃’的方法&#xff1f;如果开发者不希望某个方法再被人用的话&#xff0c;就要好好地为deprecated标注写说明。这篇文章就讨论了正确地…

实现div里的img图片水平垂直居中

body结构 <body><div><img src"1.jpg" alt"haha"></div> </body>方法一&#xff1a; 将display设置成table-cell&#xff0c;然后水平居中设置text-align为center&#xff0c;垂直居中设置vertical-align为middle。 <…

[ 懒人神器 ] —— OO一键build:.zip - .jar

懒人神器 更新 大家注意一下&#xff0c;由于在写入MANIFEST的时候&#xff0c;Class-Path路径给的是 ../lib &#xff0c;即上级目录的lib。 所以在对拍时如果手动移动了 jar包的位置&#xff0c;需要保证 lib/ 文件夹在存放jar包的上一级目录下&#xff0c;否则在运行时会报错…

实现Datagrid分页

Html页面&#xff1a; <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title></title><meta charset"utf-8" /><!-- 引入相关CSS --><…

Luogu 3698 [CQOI2017]小Q的棋盘

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

h5-plus.webview

这里是链接转载于:https://www.cnblogs.com/yuners/p/10721163.html

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

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

SQL语句01

SQL(Structured Query Language)&#xff1a;结构化查询语言SQL分类&#xff1a; 数据操纵语言DML&#xff08;Data Manipulation Language&#xff09; SELECT INSERT UPDATE DELETE 数据定义语言DDL&#xff08;Data definition language&#xff09; …

mongoose 笔记

快速启动 首先需要安装MongoDB和Node.js。 然后使用npm下载mongoose&#xff1a; npm install mongoose 接着我们直接在项目中引入mongoose&#xff0c;并且连接数据库就会在本地运行 MongoDB了&#xff1a; // index.js var mongoose require(mongoose); mongoose.connect(…

前端DES加密

1、下载crypto.js文件库 https://github.com/brix/crypto-js/releases 2、引入文件 <script type"text/javascript" src"js/jquery.min.js"></script> <script src"js/rollups/tripledes.js"></script> <script src&…

DOMBOM(source、methods、contents、Application)

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

sublime 无法下载插件解决办法(亲测有效)

最近发现sublime装不到插件 只需要在Preferences > Package Settings > Package Control > Settings - User页面加上以下代码即可&#xff1a; "channels":["https://erhan.in/channel_v3.json"]上述频道亲测有效&#xff0c;如果还不能使用的小…

ES命令

基础概念 Elasticsearch有几个核心概念。从一开始理解这些概念会对整个学习过程有莫大的帮助。 接近实时&#xff08;NRT&#xff09; Elasticsearch是一个接近实时的搜索平台。这意味着&#xff0c;从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟&#xff…

Bug : Bash on Ubuntu on Windows scp work on window but not in shell file

&#xff1a; No Permission转载于:https://www.cnblogs.com/rgqancy/p/10726154.html

图片做背景撑开div

需求点&#xff1a; 设计师给了一张超大背景图&#xff0c;需要做一个不知道大小广告位&#xff0c;要求就是要把图片撑满整个页面&#xff0c;而且还得保证自适应。 解决方案一 &#xff08;亲测有效&#xff09; HTML代码&#xff1a; <div class"wrap">…