基于django的cas服务器
文章目录
之前为某高校写的一个简易cas server,基于django实现,先上源码:django_cas_server_lite
Why
- 不想折腾java/tomcat/apache,所以没选用apereo/cas
- 利用django的认证机制易于与任何认证系统对接,包括数据库,以及jwt等
- 没有历史负担,方便页面样式设计
- 跟Open edX采用同一套技术栈
- 默认不采用https,方便开发,需要的话,采用nginx反向代理来做https
- why not
使用
把当前项目run起来后,访问/django_cas/login
即可。具体细节如下
安装
- git clone https://github.com/wwj718/django_cas_server_lite
- virtualenv cas_env
- . cas_env/bin/activate.fish
- cd django_cas_server_lite
- pip install -r requirements.txt //如果网络不便,也可以手动安装 requirements.txt里的依赖,我已经把依赖控制到最精简了
- 跑起来
- 开发调试状态:
python manage.py runserver
- 生产环节:
gunicorn django_cas_server_lite.wsgi:application --bind 127.0.0.1:8001 -w 4
,-w 4
表示4个worker,之后用nginx反向代理。gunicorn可以先跑在tmux里,如果需要将其设为守护进程,使用Supervisor
- 开发调试状态:
nginx配置
|
|
如果需要使用https(推荐),参考:使用Let’s Encrypt(certbot)为你的网站生成免费的 SSL 证书
nginx
|
|
Open edX用户
如果你未使用Open edX,可以忽视这条
如果你使用Open edX,你可以利用Open edX的edxapp env,这样一来依赖都是完备的
|
|
Supervisor配置
|
|
之后配置nginx即可,同上
设计
需求
- 实现类似apereo/cas的功能,能对接到其他认证后端
思路
- 采用django的Authenticate机制,写自己的认证后端
- 关注REMOTE_USER,主要使用单点登录解决方案
核心依赖
- django-mama-cas:A Django Central Authentication Service (CAS) single sign-on server
- It implements the CAS 1.0, 2.0 and 3.0 protocols
- Documentation
笔记
Authenticating
One or more authentication backends must be installed and configured based on your authoritative authentication sources
- Django/用户认证
- 在Django中自定义身份验证
- AUTHENTICATION_BACKENDS 的顺序很重要,所以如果用户名和密码在多个后台中都是合法的,Django 将在第一个匹配成功后停止处理。如果后台引发PermissionDenied 异常,认证将立即失败。Django 不会检查后面的认证后台。
todo
- 是remote database backend变为可选功能,采用配置文件实现
- 与LDAP对接(LDAP 3.0)
相关项目
- django_cas_server_demo
- django_cas_server_lite : 目前主要推进这个
文章作者 种瓜
上次更新 2016-09-09