django多网站用户统一认证方案:django-cas

Tomcat+CAS以及cas的mysql数据库的验证

Tomcat+cas服务器的搭建可参考文档:

CAS服务搭建(ubuntu 10.04)

http://xiaolin0199.iteye.com/blog/683759

cas的mysql数据库验证可参考文档:

测试CAS服务器(二)

http://xiaolin0199.iteye.com/blog/686229

django-cas的应用

官方文档:https://bitbucket.org/cpcc/django-cas/overview

操作过程

1.下载django-cas包:https://bitbucket.org/cpcc/django-cas/get/tip.tar.gz

2.安装

解压后直接运行$sudo python setup.py install或将djang-cas包放在项目根目录下

3.settings.py的设置

在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地址,

CAS_SERVER_URL = 'http://sso.some.edu/cas/'

4. urls.py设置

urls.py中加入:

(r'^accounts/login/$', 'django_cas.views.login'),
(r'^accounts/logout/$', 'django_cas.views.logout'),

这样你的用户验证就会有cas服务器完成

实现原理

写道
在用户进行登录时,会调用django-cas的登录函数,函数会用url跳转去CAS服务器上进行用户信息验证
当验证成功时,会返回用户名,django会根据该用户名去自己的auth_user表中查找用户,若没有用户,则新创建
当用户再次登录,就不经过CAS了,还是按原django的验证中间件,通过cookie+session判断

结论

写道
就django-cas该项目来说,并不能很好的实现多网站单点登录,同时登录,同时注销
但django与CAS服务器配合,是一定能实现单点登录的
而且不止是django,其他的如asp,java servlets,都是能实现的
在网上看见过一个例子,两个servlets能通过CAS实现同步登录

猜你喜欢

转载自xiaolin0199.iteye.com/blog/2022827