python实战-实现内网CAS统一认证登录

CAS(Central Authentication Service)集中式认证服务是一种广泛应用的单点登录协议,特别是在校园网和企业内网,它允许用户只需向认证服务器提供一次凭证,即可以访问多个应用系统。这样用户就无需在登陆应用系统时进行重复认证,而且这些应用系统也无法获得密码等敏感信息。

在前文中,我们学习了用Scrapy框架爬取数据,其中一种场景就是登录后爬取数据。那篇文章仅对登录做了一个简单说明,本文我们就通过一个实例一步步教你怎么用python实现CAS认证登录。登录完成后,爬取数据也就水到渠成了。

本文将通过以下三部分顺序展开:

  1. 我们先了解下CAS协议的流程,做知识储备。
  2. 然后再结合实例网站进行分析,加深理解
  3. 进行编码实现,验证。

CAS协议流程学习

首次访问Web服务的协议流程如下:

第1步,浏览器正常发起Web服务请求(带过期cookie或者无cookie)

第2步,web服务发现cookie无效,重定向请求到CAS登录界面进行认证

第3步,用户填写认证信息后,将认证信息POST给CAS服务器

第4步,CAS服务器判定认证信息有效,生成一个Cas-cookie,并返回一个一次性有效ticket

第5步,浏览器存储cas-cookie,并带上ticket再次访问web服务

第6步,web服务会请求CAS服务器以验证ticket有效

第7步,CAS验证ticket有效后CAS即删除ticket,返回结果给web服务

第8步,web服务生成一个service-cookie,并返回web资源给浏览器

第二次访问同一个Web服务

如上图所示,第一次访问时第8步返回的service-cookie,用于浏览器访问同一个站点的web服务。即无效请求CAS认证。

 

第二次访问不同的Web服务

协议流程和“首次访问web服务”类似,不同的是第2步重定向时,浏览器访问重定向cas服务器会带上cas-cookie,cas服务器判断cookie有效时,不会返回一个登陆界面,而是直接签发ticket。这里流程图就不再画了。

 

浏览器抓包分析

老规矩,我们采用浏览器F12开发者工具进行网络包分析。如下图所示,请求对应pkgManage资源时返回了一个302状态(即重定向),重定向的地址在响应标头的Location域中指出。查看location的值,可以确认重定向到了cas服务的登录界面,且带了一个service参数,指明了浏览器原访问的服务站点(为了cas认证后正确跳转回去)。

如下图所示,输入用户名密码后登录,可以看到发送了一个POST请求,请求正文里存在用户名,密码。然而除了用户名密码外,还有三个不知道哪里来的字段_eventid、execution和lt。

一般来说,这些都属于登录表单中的隐藏字段,服务器会校验POST请求中这些字段必须和登录界面的一致,来避免暴力破解(作用和验证码有点类似)。我们在登录界面元素中用关键字搜索,果然可以找到。编码的时候我们可以用XPATH语句获取到对应的值(可参考之前我的scrapy系列文章)。

CAS认证成功后,返回一个重定向地址且带了参数ticket。我们后续就访问这个地址(带上ticket),网站会想CAS服务验证这个ticket是否有效。

如下图,ticket验证通过后,会返回重定向地址指向最初请求的资源,并设置service-cookie。

编码实现

由于完整的流程中存在service-cookie和cas-cookie,故我们的casService也定义了两个session。其中svr_session由外层服务传入,而cas_session由类内部负责管理。初始化时从文件中加载cookie。

逻辑主体实现如下,集合上面的分析过程,代码逻辑很容易看懂,这里就不再赘述了。

本文通过一个实例,逐步分析并实操实现了利用Python进行CAS登录的示例。大家可以在校园网或企业网中进行实践。其实在协议原理了解了,并结合抓包分析加深理解后,编码是水到渠成的事情。由于篇幅所限,需要完整示例代码的可以在https://download.csdn.net/download/zhutou_xu/15498630 免费下载cas_service.rar,有疑问的也欢迎在评论区留言。后续将推出更多python实战分享,喜欢的就点赞关注我吧。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值