转载自:[记录] Open edX 配置 CAS 登陆
Open edX 目前支持CAS、SSL Client Certificates、Shibboleth三种认证扩展以及多种社会化登录(博客先前有过介绍),
默认支持列表可以参照官方WIki
CAS干嘛用的,看官比我清楚,没我清楚的请立即谷歌,故下面直接操作:
1.环境:
ubuntu 12.04
edx-devstack
2.更换django-cas
edX默认安装mitx的版本base.txt#L145略旧,我们需要换掉
请先确认您已经安装mercurial
1 |
sudo apt-get install mercurial |
克隆cpcc的最新版本:
3.CAS Server要求:
你可以安装官方标准CAS 1.x 2.x 或者3.X理论上都支持,但必须保证CAS提供username 和 email信息,建议不要使用1.x,推荐3.x
3.x添加别的字段可以参考官方wiki配置
2.x默认只提供username,需要添加别的信息就要硬编码,然后django-cas也需要相应的修改
我们测试使用2.x,只是因为学校请的攻城狮在闭源的道路上越走越远,楼主挽救不了。。。苦恼啊
4.Django-cas修改:
编辑 django_cas/backends.py 修改方法_verify_cas2
1 |
def _verify_cas2(ticket, service): |
8 |
from xml.etree import ElementTree |
10 |
from elementtree import ElementTree |
12 |
params = { 'ticket' : ticket, 'service' : service} |
13 |
url = (urljoin(settings.CAS_SERVER_URL, 'proxyValidate' ) + '?' + |
17 |
response = page.read() |
19 |
tree = ElementTree.fromstring(response) |
20 |
if tree[ 0 ].tag.endswith( 'authenticationSuccess' ): |
21 |
for element in tree[ 0 ]: |
22 |
elements[element.tag.split( "}" ).pop()] = element.text |
23 |
return tree[ 0 ][ 0 ].text, elements |
然后修改CASBackend(object)类中的authenticate方法:
1 |
def authenticate( self , ticket, service, request): |
4 |
username, attributes = _verify(ticket, service) |
6 |
request.session[ 'attributes' ] = attributes |
10 |
user = User.objects.get(username = username) |
11 |
except User.DoesNotExist: |
13 |
user = User.objects.create_user(username,attributes[ 'email' ],'') |
然后安装:
1 |
python django_cas/setup.py install |
5.配置Open edX:
编辑 edx-platform/lms/envs/devstack.py 加入:
1 |
FEATURES[ 'AUTH_USE_CAS' ] = True |
3 |
AUTHENTICATION_BACKENDS = ( |
4 |
'django.contrib.auth.backends.ModelBackend' , |
5 |
'django_cas.backends.CASBackend' , |
7 |
INSTALLED_APPS += ( 'django_cas' ,) |
8 |
MIDDLEWARE_CLASSES += ( 'django_cas.middleware.CASMiddleware' ,) |
6.测试: