Quantcast
Channel: CodeSection,代码区,Python开发技术文章_教程 - CodeSec
Viewing all articles
Browse latest Browse all 9596

基于django的cas服务器

$
0
0

前段时间为某高校写一个简易的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 即可。具体细节如下


基于django的cas服务器
安装 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配置 server { listen 80; #端口 server_name cas.just4fun.site; #访问域名 access_log /tmp/access.log; error_log /tmp/access.log; location / { proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; if (!-f $request_filename) { proxy_pass http://127.0.0.1:8001; #这里是django应用的gunicorn端口 break; } } }

如果需要使用https(推荐),参考: 使用Let’s Encrypt(certbot)为你的网站生成免费的 SSL 证书

nginx server { listen 80; #端口 server_name cas.just4fun.site; #访问域名 #root /home/bob/dylan/; access_log /tmp/access.log; error_log /tmp/access.log; location / { proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; if (!-f $request_filename) { proxy_pass http://127.0.0.1:8001; #这里是flask应用的gunicorn端口 break; } } } Open edX用户

如果你未使用Open edX,可以忽视这条

如果你使用Open edX,你可以利用Open edX的edxapp env,这样一来依赖都是完备的

git clone https://github.com/wwj718/django_cas_server_lite cd django_cas_server_lite . /edx/app/edxapp/edxapp_env gunicorn django_cas_server_lite.wsgi:application --bind 127.0.0.1:8001 -w 4 # 这一步可选,推荐使用Supervisor,见下文 Supervisor配置 [program:cas] command=/edx/app/edxapp/venvs/edxapp/bin/gunicorn django_cas_server_lite.wsgi:application user=www-data directory=/edx/app/edxapp/django_cas_server_lite environment=PORT=8001,ADDRESS=127.0.0.1,LANG=en_US.UTF-8,PATH="/edx/app/edxapp/venvs/edxapp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" stdout_logfile=/edx/var/log/supervisor/%(program_name)s-stdout.log stderr_logfile=/edx/var/log/supervisor/%(program_name)s-stderr.log killasgroup=true stopasgroup=true

之后配置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变为可选功能,采用配置文件实现 相关项目 django_cas_server_demo django_cas_server_lite : 目前主要推进这个

Viewing all articles
Browse latest Browse all 9596

Trending Articles