django多网站用户统一认证方案:django-cas
Tomcat + CAS 验证
cas的mysql数据库
Tomcat+cas服务器的搭建可参考文档: CAS服务搭建(ubuntu 10.04)
cas的mysql数据库验证可参考文档: 测试CAS服务器(二)
django-cas 官网
官方文档: https://bitbucket.org/cpcc/django-cas/overview
django-cas 操作过程
1. 下载 django-cas
https://bitbucket.org/cpcc/django-cas/get/tip.tar.gz
2. 安装
解压后,直接运行
$sudo python setup.py install (推荐)
或将djang-cas包放在项目根目录下
3. settings.py 设置
在 vim mysite/settings.py 中加入
MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django_cas.middleware.CASMiddleware', 'django.middleware.doc.XViewMiddleware', ) AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', 'django_cas.backends.CASBackend', )
另外还有几个配置变量,如CAS_SERVER_URL是必须的,是你的cas服务器url地址
vim mysite/urls.py
CAS_SERVER_URL = 'http://sso.some.edu/cas/'
4. urls.py设置
vim mysite/urls.py 中加入:
(r'^accounts/login/$', 'django_cas.views.login'), (r'^accounts/logout/$', 'django_cas.views.logout'),
这样你的用户验证就会有cas服务器完成
django-cas 实现原理
在用户进行登录时,会调用django-cas的登录函数,函数会用url跳转去CAS服务器上进行用户信息验证
当验证成功时,会返回用户名,django会根据该用户名去自己的auth_user表中查找用户,若没有用户,则新创建
当用户再次登录,就不经过CAS了,还是按原django的验证中间件,通过cookie+session判断
错误处理
Error importing middleware django_cas.middleware: "cannot import name get_host"
解决:
进入%PYTHON_HOME%/lib/site-packages/django.cas-2.1.1-py2.7.egg/django_cas,打开views.py,
vim /usr/local/lib/python2.7/dist-packages/django_cas-2.1.0-py2.7.egg/django_cas/views.py
1. 将 from django.http import 后面的get_host删去,
#from django.http import get_host, HttpResponseRedirect, HttpResponseForbidden
from django.http import HttpResponseRedirect, HttpResponseForbidden
2. 并把文件中所有的 get_host(request) 全部替换为 request.get_host()
结论
django-cas该项目来说,并不能很好的实现多网站单点登录,同时登录,同时注销
但django与CAS服务器配合,是一定能实现单点登录的
而且不止是django,其他的如asp,java servlets,都是能实现的
在网上看见过一个例子,两个servlets能通过CAS实现同步登录
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2016-09-03 02:23:08
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!