python3 saml包的uw特定适配器。
uw-saml的Python项目详细描述
uw saml
一个特定于uw的适配器 python3-saml包。这个包裹 是为与其他idp联合而构建的,但默认情况是使用uw 身份提供程序。它可以用于任何框架。对于Django的特定 包装,也考虑 uw-django-saml2。
安装
pip install uw-saml[python3-saml]
额外的[python3-saml]
是因为saml包对于
在工作站环境中安装,因为需要libxmlsec1 dev
图书馆。因此,这是一个可选的要求,会导致运行时错误
而不是安装时错误。或者,可以使用模拟
通过设置uw_saml2.python3_saml.MOCK = True
进行接口。
使用烧瓶的登录端点示例
在这个例子中 SP Registry并注册了 实体id为https://samldemo.iamdev.s.uw.edu/saml,acs端点为 https://samldemo.iamdev.s.uw.edu/saml/login。获取将返回 重定向到idp进行身份验证,posts将尝试处理saml 回应。
fromflaskimportrequest,session,redirectimportuw_saml2@app.route('/saml/login',methods=['GET','POST'])deflogin():session.clear()args={'entity_id':'https://samldemo.iamdev.s.uw.edu/saml','acs_url':'https://samldemo.iamdev.s.uw.edu/saml/login'}ifrequest.method=='GET':args['return_to']=request.args.get('url',None)returnredirect(uw_saml2.login_redirect(**args))attributes=uw_saml2.process_response(request.form,**args)session['userid']=attributes['uwnetid']session['groups']=attributes.get('groups',[])relay_state=request.form.get('RelayState')ifrelay_stateandrelay_state.startswith('/'):returnredirect(urljoin(request.url_root,request.form['RelayState']))return'Welcome '+session['userid']
注意事项
会话
请考虑会话的生存期。本例中的会话作为 签名的cookie。理想情况下,cookie会在浏览器关闭时过期,同时 一些适合你申请的时间限制。再举一个烧瓶的例子 十分钟内…
fromdatetimeimporttimedeltaapp.config.update(PERMANENT_SESSION_LIFETIME=timedelta(minutes=10))
重放攻击预防
默认情况下,此包使用内存缓存检查重播攻击。
要使用分布式缓存,如redis或memcached,您可以插入
将对象缓存到uw_saml2.auth.CACHE
。下面是一个如何做到这一点的例子…
importwerkzeug.contrib.cacheimportuw_saml2.authuw_saml2.auth.CACHE=werkzeug.contrib.cache.RedisCache()
django的缓存后端使用相同的方法,因此也可以注入。