大致说一下思路,这东西有点绕,很难讲清楚,可能是我思路还不是很清晰。
1.项目有这些服务:
-
web前端
-
nginx:web部署在这里
-
python后端:提供一个cas认证接口(下面描述中的cas接口指的都是该接口)
-
cas认证服务
2.遇到的问题及解决办法
-
使用axios提供的get请求,请求后端提供cas认证接口,无法实现重定向,不知道什么原因。最后使用在浏览器的地址栏中填入cas接口地址,可以实现重定向;
window.location.replace();
-
由于我们有多套环境,如开发环境、测试环境.....,使用的又是在地址栏中输入地址进行直接访问,不同环境地址也不同。于是我在nginx的配置文件上写了一个接口,返回该环境的cas接口地址与web首页地址,进行cas接口请求前,先请求该接口,拿到地址。存web首页地址,为了在登录成功后,后端重定向到web首页用的。
-
拿到接口,请求cas接口,后端会请求向cas服务发送请求,(cas是记录的,如果没登陆,)cas服务会把页面重定向到cas登陆页(cas/login),此处的重定向会出现一个错误,浏览器无法直接进入cas登陆页面(具体什么错误,时间久了,我也忘了,好像是域名的问题),python后端再提供一个login接口,帮助重定向。在ngxin上做配置,匹配到~/cas/,替换成python后端的地址,使得该重定向变成一个get请求.
具体做法:
web前端做法。
在路由守卫中进行判断
router.beforeEach( (to, from, next) => {})
-
进入首页之前,判断用户id是否存在cookie中,如果存在,就前往首页。如果不存在,要向后端的cas接口请求cas认证地址与项目首页地址(该接口我写在nginx上),拿到地址后,使用下面的方法访问cas接口。
window.location.replace();
-
然后就是打开cas登录页面,登录。
-
登录成功后,会被重定向到项目首页,又进入路由守卫。取地址栏中的地址,判断该地址是否从登录成功那里过来的。我的做法是让后端重定向时在地址中带上用户的id与特殊的约定好的一段字符串,以此判断。如果是从登录成功那里来的,直接前往首页。(所以该判断要写在路由守卫中的最开始,并阻止下面的执行)
router.beforeEach( (to, from, next) => {
// 拦截从cas登陆页过来的路由
let url = to.fullPath;
if (url.includes('?cas_user_id=')) {
next('index');
return false;
});
-
到首页后拿着用户id获取用户信息即可
前端使用vue+vueRouter开发,后端使用Python3开发,web项目部署在nginx上,项目登陆接入cas认证。思路大致说一下思路,这东西有点绕,很难讲清楚,可能是我思路还不是很清晰。1.项目有这些服务:web前端 nginx:web部署在这里 python后端:提供一个cas认证接口(下面描述中的cas接口指的都是该接口) cas认证服务2.遇到的问题及解决...
以上开启后台dev环境
uwsgi extra_uwsgi.ini
须藤ln -s /home/genhongchan/code/
python
_web/extra-income/back/extra_
nginx
.conf /etc/
nginx
/conf.d/
sudo /etc
5 try:
6 username=int(input("请输入
登录
手机号:\n"))
7 password=input("请输入
登录
密码:\n")
CAS
(Central Authentication Service)集中式认证服务是一种广泛应用的单点
登录
协议,特别是在校园网和企业内网,它允许用户只需向认证服务器提供一次凭证,即可以访问多个应用系统。这样用户就无需在
登陆
应用系统时进行重复认证,而且这些应用系统也无法获得密码等敏感信息。
在前文中,我们学习了用Scrapy框架爬取数据,其中一种场景就是
登录
后爬取数据。那篇文章仅对
登录
做了一个简单说明,本文我们就通过一个实例一步步教你怎么用
python
实现
CAS
认证
登录
。
登录
完成后,爬取数据也就水到渠成了
一。通过url配置让访问请求转到
cas
验证
:
url(r’^login/$’,
cas
.views.login’
cas
.views.login’, name=’login’),
二。
cas
.views.login 方法有两方面的作用
1.若请求中没有携带ticket,则转到
CAS
login URL
2.若请求中带了ticket,则
验证
CAS
ticket的
CAS
是为web服务提供单点
登录
认证的方式,其认证过程如下图所示。目前
CAS
仅支持不分离的项目
接入
,详见
CAS
Client。由于前后端分离的项目自己需要维护会话,故不能通过官方提供的配置
实现
,本文将聊聊具体如何
实现
前后端分离项目使用
CAS
单点
登录
认证。
CAS
的简单了解
Ticket Granting Cookie,TGC与TGT相当于sessionId与session。TGC作为TGT的key,储存于浏览器的cookie中(
CAS
服务端域名下)。
Ticket Granti
什么是单点
登录
?单点
登录
全称Single Sign On(以下简称SSO),是指在多系统应用群中
登录
一个系统,便可在其他所有系统中得到授权而无需再次
登录
,包括单点
登录
与单点
注销
两部分.我们常见的
实现
框架有OAuth2和
cas
. 我下面的例子是基于其他博客的作者发给我的一个可运行示例进行一些说明, 实际上也就一个关键点, 一直困扰我们.
cas
服务5.2
springboot2.0.3
vue
2.0
Tomcat8.5.39
这里需要注意, 我在内网运行
cas
服务端的时候,发现Tomcat8.0
spring boot项目访问jsp页面已经介绍了如何在springboot项目中访问jsp页面,有了上面的基础在下面
实现
cas
集成
vue
项目,由于
vue
项目是前后台分离的,在此记录下具体集成的步骤,方便以后查看
项目背景:
cas
集成的项目是使用renren-fast提供的开源框架,后台是用spring boot写的,前台使用
vue
。这里用
cas
集成的项目是在不改变项目原有
登录
机制的情况下,为项...