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实现同步登录