根据《 CAS统一登录认证(7): 非典型.net客户端 》上篇文章的思路,重写了一个简单验证的cas python 客户端 要标准的cas python 客户端,github查找下载 cas-sample-python-webapp-master,部署拦截器,结合django 的认证机制,实现拦截和验证,本文无需设置拦截器,没有使用django的auth认证机制,只是静默的简单通过cas验证用户,访问caslogin 地址才会进行连接验证。
访问url如: http://X.X.X.X/caslogin/
python 源码如下:
from urllib import urlencode,urlopen
from urlparse import urljoin
from django.http import HttpRequest,HttpResponse,HttpResponseRedirect
from xml.etree import ElementTree
import urllib2
import ssl
def caslogin(request):
ssl._create_default_https_context = ssl._create_unverified_context #取消SSL验证
CASHOST = 'https://author.linbsoft.com.cn:8443/cas/' #cas服务器地址
tkt = request.GET.get('ticket')
if not tkt: #还没有ticket 转到cas服务器登录
redir = CASHOST + 'login?service=' + request.build_absolute_uri()
return HttpResponseRedirect(redir)
validateurl = CASHOST + 'serviceValidate?ticket=' + tkt + '&service=' + request.build_absolute_uri('?')
page=urlopen(validateurl) #获取验证信息
userid=''
html=''
try:
response=page.read()
finally:
page.close()
if response=='':
html="user validate return null" #获取的验证信息为null
else:
if 'not recognized' in response: #验证未通过
html="ticket not recongized"
else: #验证通过,获取用户
userid=response
request.session['username']=userid
html="sucess login user:" + userid
return HttpResponse(html)
访问后,未登录cas,会转到cas登录界面,登录后返回,显示登录用户名