1. SSO 简介
1.1 单点登录定义
单点登录 (Single sign on), 英文名称缩写 SSO,SSO 的意思就是在多系统的环境中, 登录单方系统, 就可以在不用再次登录的情况下访问相关受信任的系统. 也就是说只要登录一次单体系统就可以. 计划在项目中加入单点登录, 开发中, https://github.com/u014427391/taoshop
1.2 单点登录角色
单点登录一般包括下面三种角色:
1用户 (多个);
2认证中心 (一个);
3web 应用 (多个).
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: 参考学习教程
单点登录实现方式:
单点登录的三种实现方式 https://cnodejs.org/topic/55f6e69904556da7553d20dd
SpringBoot 集成 Cas
SpringBoot 集成 CAS
Spring Boot 集成 Shiro 和 CAS
基于 Spring Boot 的单点登录 https://my.oschina.net/marvelcode/blog/1576104
springboot + shiro + cas4.2.7 实战
CAS 单点登录教程:
Cas 专题文章列表 http://www.coin163.com/java/cas/index.html
测试认证方式搭建 CAS
SSO 之单点登录详细搭建教程
CAS 实现 SSO 单点登录原理
使用 CAS 在 Tomcat 中实现单点登录
来源: https://www.cnblogs.com/mzq123/p/9839862.html