[原创]django+ldap+memcache实现单点登录+统一认证
前言
由于公司内部的系统越来越多,为了方便用户使用,通过django进行了单点登录和统一认证的尝试,目前实现了django项目的单点登录和非django项目的统一认证,中间波折挺多,涉及的技术包括django\memcache\ldap等,如果有时间的话,后边会逐步更新博客分开介绍实现过程。
sso的实现相对复杂,期间也调研了如cas+ldap,最后采取了一种学习成本较低的方式,即通过mc共享session方式实现单点登录。有兴趣并且懂java的同学可以自行了解cas。应该是一种更成熟的sso解决方案
此外,目前单点登录只支持django项目,其他系统只能完成到统一认证,后续还需提供一套http接口以便其他语言的项目可以接入
实现过程
请参考以下这一堆博客
ldap部署相关,ldap双机\LAM配置管理\ldap备份还原
[原创]django+ldap实现统一认证部分一(django-auth-ldap实践)
[原创]django+ldap实现统一认证部分二(python-ldap实践)
[原创]django+ldap实现单点登录(装饰器和缓存)
逻辑图示意
效果展示
登录首页:可以实现用户的注册、登录、重置密码,实际通过python-ldap模块来操作ldap集群
ldap集群的搭建请参考后边博客
登录后的用户首页,如接入完成的下游系统,可以根据下游系统的权限自动进行登录,退出后全部系统退出
登录判定成功后,会刷新下游系统的账户信息,以避免出现下游系统与统一认证系统信息不一致现象
使用了开源的基于php开发的ldap管理工具ldap account manager(简称lam),用于更方便的从ldap查询或管理用户,包括sso系统自带admin权限、和用户是否具有登录权限,均可通过此平台统一控制
也可以使用ldap经典的树形结构展示,我通过划分成3个group(管理员、员工、黑名单),对权限进行基础控制
结语
目前已经开发完毕并投入生产,期间还有个稍复杂的地方,就是一些下游系统已经运行一段时间,拥有了一些账户,这个导入工作可以通过lam进行,但lam不支持中文,还需要进行一个utf-8的转换。
后续会更新多篇博客对完整实现方式进行介绍,希望可以给需要的人带来一些帮助。