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
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 要成为一个Python的大牛,需要通过一系列实战经验来不断进阶。 首先,我们需要从菜鸟开始,学习基本的语法和常用库。掌握Python的基本语法、变量、数据类型、条件语句和循环语句等是必不可少的。此外,还要熟悉常用的Python库,如NumPy、Pandas和Matplotlib等,这些库在数据处理和可视化方面都非常常用。 接下来,我们需要通过实战来巩固所学的知识。可以选择一些小项目来实践,比如编写一个简单的Web应用、爬取网页数据或者创建一个简单的机器学习模型。通过实际应用,可以提升对Python的实际运用能力。 在实战过程中,我们需要积累并解决一些常见的问题。这些问题可能涉及到代码的优化、调试、性能优化等方面。通过解决这些问题,我们可以提升自己的编程能力,并且学会更高效地利用Python来解决实际问题。 另外,为了进一步提升自己的水平,可以参与开源项目或者自己创建项目。通过参与开源项目,可以学习到更多高级的编程技术和实践经验。同时,创建自己的项目有助于锻炼独立思考和解决问题的能力。 除了对Python语言的掌握外,我们还需要了解相关的领域知识。比如,在数据科学领域,需要学习统计学、机器学习和数据挖掘等知识。通过将Python与领域知识相结合,可以在相关领域中发挥更大的作用。 总而言之,成为一个Python的大牛需要不断地实践和学习。通过不断地积累实战经验,掌握并解决常见问题,参与开源项目或者自己创建项目,同时结合相关领域的知识,多角度地深入学习Python。这样的进阶之路需要耐心和毅力,但最终将能够取得令人骄傲的成果。 ### 回答2: Python是一门广泛应用于软件开发和数据分析的编程语言,具有简洁易学、功能强大的特点,因此非常适合初学者入门。然而,要想从菜鸟到大牛,需要不断拓展知识,提升技能。 首先,要全面掌握Python的基础知识,包括语法、数据类型、条件语句、循环语句等。可以通过阅读相关书籍、教程、参加培训班等方式进行学习。 其次,理解面向对象编程(OOP)是进阶的关键。Python是一门支持OOP的语言,掌握面向对象的概念和用法可以使代码更加模块化和可重用。可以通过练习编写类和对象,深入理解继承、封装和多态等概念。 另外,掌握Python标准库和第三方库也是提升的必要条件。标准库包含了许多常用的模块和函数,如操作文件、网络编程、并发等。同时,第三方库可以满足更具体的需求,如数据分析(NumPy、Pandas)、机器学习(Scikit-learn、TensorFlow)等。可以通过实践项目和参与开源社区来积累经验和熟悉常用的库。 此外,代码优化和性能调优也是进阶的一环。良好的代码结构、规范的命名和注释可以提高代码的可读性和可维护性。同时,了解性能优化的技巧和工具可以提高程序的执行效率。 最后,实际项目经验是从菜鸟到大牛的关键。通过实践解决真实的问题,遇到的挑战和解决方案都可以让你不断成长。可以自己找项目实践,也可以参与开源项目、参加比赛等方式来积攒经验。 总的来说,进阶的过程需要坚持不懈的学习和实践,并且保持持续学习的动力。不断总结和思考,参与开源社区和技术讨论也可以获得更多的启发和帮助。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值