cas系统简介
提供运营系统的 SSO 和 access control功能。类似百度的UC。
CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。官方网站:https://www.apereo.org/。
CAS 具有以下特点:
开源的企业级单点登录解决方案。
CAS Server 为需要独立部署的 Web 应用。
CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。
从结构上看,CAS 包含两个部分:CAS Server 和 CAS Client。
CAS Server 需要独立部署,主要负责对用户的认证工作;
CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。
Python接入cas示例
一、soc环境
python3.6.9 + django 2.1.7 + django-cas-ng 3.6.0
二、cas服务端
cas 3.5.2 (yale大学开源)
三、配置流程
3.1、settings.py 配置
3.1.1、 配置INSTALLED_APPS:添加django_cas_ng到INSTALLED_APPS
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django_cas_ng']
3.1.2、配置MIDDLEWARE:添加django_cas_ng.middleware.CASMiddleware到MIDDLEWARE:
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django_cas_ng.middleware.CASMiddleware']
3.1.3、配置AUTHENTICATION_BACKENDS:添加django_cas_ng.backends.CASBackend到AUTHENTICATION_BACKENDS:
AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', 'django_cas_ng.backends.CASBackend',)
3.1.4、配置CAS服务器URL和CAS协议版本:(咱们的cas是3.5.2 cas_version 需要填写对应的2;当前最新版的版本是3;版本号不能填错,否则无法认证通过)
CAS_SERVER_URL = 'https://test-cas.xxx.com/cas/'
CAS_VERSION = '2'
CAS_REDIRECT_URL = "/server/api/portmonitor/gpb/" #认证通过后跳转到的目录
以上是settings.py中的配置
#####################################################################
下面是代码中的配置
3.1.5、配置 mysite/urls.py:
from django.contrib import adminfrom django.urls import pathimport django_cas_ng.viewsfrom . import viewsurlpatterns = [ path('', views.index, name='index'), path('admin/', admin.site.urls), path('accounts/login', django_cas_ng.views.LoginView.as_view(), name='cas_ng_login'), path('accounts/logout', django_cas_ng.views.LogoutView.as_view(), name='cas_ng_logout'),]
3.1.6、mysite / views.py
创建一个名为的新文件mysite/views.py并实现index方法。
演示视图将使用检查用户身份验证request.user.is_authenticated。如果通过身份验证,它将从以下位置获取登录的用户名 request.user.username
from django.httpimport HttpResponsedef index(request): if request.user.is_authenticated: ##使用request对象可以做权限控制 return HttpResponse('<p>Welcome to <a href="https://djangocas.dev">django-cas-nga>.p><p>You logged in as <strong>%sstrong>.p><p><a href="/accounts/logout">Logouta> p>' % request.user) else: return HttpResponse('<p>Welcome to <a href="https://djangocas.dev">django-cas-nga>.p><p><a href="/accounts/login">Login<
四、生成数据库
只需要直接执行 migrate 就可以了,我默认用的sqlite3数据库
$ python manage.py migrateOperations to perform: Apply all migrations: admin, auth, contenttypes, django_cas_ng, sessionsRunning migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying django_cas_ng.0001_initial... OK Applying sessions.0001_initial... OK
可以登陆数据库检查新生成的表:一共新增6张表
sqlite3 db.sqlite3root@xxx:/apps/soc_test# sqlite3 db.sqlite3SQLite version 3.22.0 2018-01-22 18:45:57Enter ".help" for usage hints.sqlite> .tablesauth_group django_admin_log auth_group_permissions django_cas_ng_proxygrantingticketauth_permission django_cas_ng_sessionticket auth_user django_content_type auth_user_groups django_migrations auth_user_user_permissions django_session
五、运行项目测试
$ python manage.py runserver 0.0.0.0:80Performing system checks.........Django version 2.1.7, using settings 'mysite.settings'Starting development server at http://ip:80/Quit the server with CONTROL-C.