php cas单点登录

php cas单点登录一、CAS简介1、结构体系从结构体系看,CAS包括两部分:CASServer和CASClient。1.1、CASServerCASServer负责完成对用户的认证工作,需要独立部署,CASServer会处理用户名/密码等凭证(Credentials)。1.2、CASClient负责处理对客户端受保护资源的访问请求,

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

一、CAS简介
1、结构体系
从结构体系看, CAS 包括两部分: CAS Server 和 CAS Client 。

1.1、 CAS Server
CAS Server 负责完成对用户的认证工作 , 需要独立部署 , CAS Server 会处理用户名 / 密码等凭证(Credentials) 。

1.2、 CAS Client
负责处理对客户端受保护资源的访问请求,需要对请求方进行身份认证时,重定向到 CAS Server 进行认证。(原则上,客户端应用不再接受任何的用户名密码等 Credentials )。

CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。

2、 CAS 原理和协议
2.1、 基础模式
基础模式 SSO 访问流程主要有以下步骤:

  1. 访问服务: SSO 客户端发送请求访问应用系统提供的服务资源。

  2. 定向认证: SSO 客户端会重定向用户请求到 SSO 服务器。

  3. 用户认证:用户身份认证。

  4. 发放票据: SSO 服务器会产生一个随机的 Service Ticket 。

  5. 验证票据: SSO 服务器验证票据 Service Ticket 的合法性,验证通过后,允许客户端访问服务。

  6. 传输用户信息: SSO 服务器验证票据通过后,传输用户认证结果信息给客户端。

下面是 CAS 最基本的协议过程:

基础协议图

如 上图: CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护 Web 应用的受保护资源,过滤从客户端过来的每一个 Web 请求,同 时, CAS Client 会分析 HTTP 请求中是否包含请求 Service Ticket( ST 上图中的 Ticket) ,如果没有,则说明该用户是没有经过认证的;于是 CAS Client 会重定向用户请求到 CAS Server ( Step 2 ),并传递 Service (要访问的目的资源地址)。 Step 3 是用户认证过程,如果用户提供了正确的 Credentials , CAS Server 随机产生一个相当长度、唯一、不可伪造的 Service Ticket ,并缓存以待将来验证,并且重定向用户到 Service 所在地址(附带刚才产生的 Service Ticket ) , 并为客户端浏览器设置一个 Ticket Granted Cookie ( TGC ) ; CAS Client 在拿到 Service 和新产生的 Ticket 过后,在 Step 5 和 Step6 中与 CAS Server 进行身份核实,以确保 Service Ticket 的合法性。

在该协议中,所有与 CAS Server 的交互均采用 SSL 协议,以确保 ST 和 TGC 的安全性。协议工作过程中会有 2 次重定向 的过程。但是 CAS Client 与 CAS Server 之间进行 Ticket 验证的过程对于用户是透明的(使用 HttpsURLConnection )。

CAS 请求认证时序图如下:

这里写图片描述

二、搭建CAS服务器
一般都是java服务器,本文不做介绍,有兴趣的可以借鉴下面的参考文档。

三、php客户端
PHP客户端下载地址:http://downloads.jasig.org/cas-clients/php/,目前最新版本为CAS-1.3.4
新建项目:cas.将CAS文件夹、CAS.php 和docs/examples/example_simple.php 复制到工程中,修改CAS/client.php,将其中的https改为http,即可成功登录。
cas需要用到的api:
phpCAS::client(CAS_VERSION_2_0, 服务器IP地址,端口,目录); 新建连接
phpCAS::setDebug() 开启调试模式
phpCAS::setNoCasServerValidation(); 用http协议连接
phpCAS::handleLogoutRequests(); 同步退出
phpCAS::forceAuthentication(); 调用登录页面
phpCAS::checkAuthentication() 检查是否登录
phpCAS::getUser() 获得登录之后的用户名

另外如果要用ajax异步判断是否登录,则不能用checkAuthentication方法,只能用session来判断。(虽然感觉有点不妥,但是只能想到这个办法了……….)

参考文档:http://www.open-open.com/lib/view/open1432381488005.html
http://blog.csdn.net/haiqiao_2010/article/details/38365733
http://blog.chinaunix.net/uid-22816738-id-3525939.html
http://blog.csdn.net/molaifeng/article/details/20628225

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

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

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


相关推荐

  • windows彻底删除idea

    windows彻底删除idea1程序卸载打开控制面板,选中idea,卸载;2注册表清理每个程序安装后都会有注册码,必须删除;windows+R然后输入regedit:进入注册表,2.1点击一级菜单HKEY_CURRENT_USER,右键查找,输入idea,会找到jetbrains,然后,右键删除。2.2再来一次,点击一级菜单HKEY_CURRENT_USER,右键查找,输入jetbrain,会找到jetbrain相关,然后,右键删除。3卸载残留清理主要有几个地方C:\\ProgramF

    2022年6月16日
  • 一步到位分布式开发Zookeeper实现集群管理

    一步到位分布式开发Zookeeper实现集群管理

    2022年3月12日
  • uboot中的mmc命令

    uboot中的mmc命令

    2021年11月29日
  • python和c++哪个好_run pycharm community edition

    python和c++哪个好_run pycharm community edition在pycharm中使用django命令的过程中经常会用到pythonmanage.py相关的命令,每次都输入pythonmanage.py会比较麻烦,可以利用pycharm提供的tools来省去pythonmanage.py的重复输入。具体实现过程如下:先进入settings完成如下操作随后可勾选Tools中的Runmanage.pyTask完成后即可以直接输入manag…

    2022年8月26日
  • Python数组的使用_算法高效性

    Python数组的使用_算法高效性如果我们需要一个只包含数字的列表,那么使用数组方式比list方式更高效。而且数组还支持所有跟可变序列有关的操作,比如移除列表中的一个元素(.pop)、插入元素(.insert)和在列表末尾一次性追加另一个序列中的多个值(.extend)。除此之外,数组还定义从文件读取(.frombytes)与写入(.tofile)的效率更高的方法。创建数组需要一个类型码,形如array(‘d’),这个类型码是用来表示在底层实现的C语言的数据类型。一般我们用的Python底层是用C语言编写实现的&n

    2022年8月13日
  • 在html中js如何给字符串中加换行符

    在html中js如何给字符串中加换行符varstr=’如果有一天休息休息下cvcvx,’+”\n”+’那么~~~’;这种写法在html中是会被识别为”如果有一天休息休息下cvcvx,\n那么~~~”那么如何保证其这么写会被识别,只需要在该div的样式中加入”white-space”:”pre”这个样式例如:…

    2022年5月10日

发表回复

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

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