CAS单点登录系列之原理简单介绍[通俗易懂]

CAS单点登录系列之原理简单介绍[通俗易懂]1.SSO简介1.1单点登录定义单点登录即在多系统的环境中,登录单方系统,就可以在不用再次登录的情况下访问相关受信任的系统。2.CAS简介CAS(CenterAuthenticationService)是耶鲁大学研究的一款开源的单点登录项目,主要为web项目提供单点登录实现,属于WebSSO。待续…,PS:找时间继续写…单点登录实现方式:单点登录的三…

大家好,又见面了,我是你们的朋友全栈君。

一、 SSO简介

1.1 单点登录定义

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

1.2 单点登录角色

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

①用户(多个);

②认证中心(一个);

③Web应用(多个)。

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

1.3 单点登录分类

因为http协议是无状态的协议,所以要保持登录状态,必须要存储登录信息,按照存储方式,单点登录实现方式主要可以分为两种。

  • 一种是基于Cookie的,这种比较常见,比如下文介绍的CAS也是基于Cookie的;
  • 另外一种是基于Session的,其实理解起来就是会话共享,只有实现不同子系统之间的会话共享就能实现单点登录,详情可以参考我之前的博客,就是实现会话共享实现单点登录的,https://blog.csdn.net/u014427391/article/details/78653482

二、 CAS简介

2.1 CAS简单定义

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

2.2 CAS体系结构

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

CAS Server就是Cas开源的,需要去github下载,然后进行修改;Cas Client
可以是App或者web端的或者PC端,CAS支持多种开发语言,java、php、C#等等

这里写图片描述
PS:图来自官网,这里简单介绍一下,从图可以看出,CAS支持多种方式的认证,一种是LDAP的、比较常见的数据库Database的JDBC,还有Active Directory等等;支持的协议有Custom Protocol 、 CAS 、 OAuth 、 OpenID 、 RESTful API 、 SAML1.1 、 SAML2.0 等

2.3 CAS原理

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

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

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

3、CAS Server会对请求做认证,验证是否有TGC(Ticket Granted Cookie,有TGC说明已经登录过,不需要再登录,没有就返回登录页面

4、认证通过后会生成一个Service Ticket返回Cas Client,客户端进行Ticket缓存,一般放在Cookie里,我们称之为TGC(Ticket Granted Cookie)

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

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

看到这个过程,我们大概就能理解CAS是怎么实现的,看起来过程挺多的,不过这些过程都是CAS在后台做的。CAS Service和CAS Client通讯基于HttpUrlConnection

注意要点:

  • TGT(Ticket Granded Ticket),就是存储认证凭据的Cookie,有TGT说明已经通过认证
  • ST(Service Ticket),是由CAS认证中心生成的一个唯一的不可伪装的票据,用于认证的
  • 没登录过的或者TGT失效的,访问时候也跳转到认证中心,发现没有TGT,说明没有通过认证,直接重定向登录页面,输入账号密码后,再次重定向到认证中心,验证通过后,生成ST,返回客户端保存到TGC
  • 登录过的而且TGT没有失效的,直接带着去认证中心认证,认证中心发现有TGT,重定向到客户端,并且带上ST,客户端再带ST去认证中心验证

三、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>

单点登录
这里写图片描述

单点登出
在这里插入图片描述

附录

参考教程:

Cas专题文章列表

springboot + shiro + cas4.2.7 实战

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133724.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 日志管理方法及系统

    日志管理方法及系统摘要本发明涉及应用系统日志管理技术领域,提供了一种日志管理方法和系统,所述方法包括如下步骤:S1:初始化系统业务功能列表和业务功能方法列表;S2:将业务操作中的具体操作信息与系统日志表和历史数据日志表直接相关联;S4:根据业务操作自动记录日志信息。本发明从整体考虑整个应用系统的日志信息与业务操作挂接,用户在运行时可以根据当前的需要,选择某业务操作是否需要记录日志,并且在业务操作界面能即时将

    2022年6月9日
    33
  • html幻灯片图片切换效果代码,jquery的幻灯片图片切换效果代码分享

    html幻灯片图片切换效果代码,jquery的幻灯片图片切换效果代码分享本文实例讲述了jquery的幻灯片图片切换效果。分享给大家供大家参考。具体如下:这是一款基于jquery的幻灯片图片切换效果代码,有缩略图和标题,可以自定义标题。运行效果图:——————-查看效果下载源码——————-小提示:浏览器中如果不能正常运行,可以尝试切换浏览模式。(1)在head区域引入CSS样式:(2)js代码://$(do…

    2022年7月14日
    38
  • 8024401c 无法更新,更新失败,更新错误

    8024401c 无法更新,更新失败,更新错误网上的方法不好使的时候,请试试卸载你的360全家桶。再试试更新…

    2022年4月29日
    42
  • H3C bridge端口脚本[通俗易懂]

    H3C bridge端口脚本[通俗易懂]H3CComwareVersion5.20是不支持一次选择多个端口的(已通过H3C400电话确认)一个个敲太麻烦我们可以通过复制脚本的方式快速将接口配置为bridge。interfaceGigabitEthernet1/0/1portlink-typeaccessportbridgeenablequitinterfaceGigabitEthern

    2022年5月29日
    34
  • Spring AOP 实现原理

    Spring AOP 实现原理什么是AOPAOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-OrientedPrograming,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从

    2022年7月12日
    13
  • 怎么自定义服务器的404,如何自定义404页面

    怎么自定义服务器的404,如何自定义404页面404错误页面是WWW网站访问比较经常出现的错误。大家最熟悉的也是最常见的出错提示:404notfound。404页面就是当用户输入了错误的链接时,返回的页面。而默认的404错误页面呆板麻木,让访问者感觉很挫败,可能会直接离开您的网站。自定义404页面的目的是:告诉浏览者其所请求的页面不存在或链接错误,同时引导用户使用网站其他页面而不是关闭窗口离开。是增强用户体验的很好的做法。简而言之,有两点…

    2022年7月27日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号