文章版本: v1.0
前言:
在运维开发的众多系统中,怎么能更好的管理用户账号和密码,以及做到统一的brac权限角色配置系统。
以前记得最初做运维开发项目的时候,每个app都是一套用户密码,顶多做了一个加密流转,申请接入的时候,需要领导的邮件审批,后期改成ldap在openldap做认证了。 但是现在不这么搞了。
原因呢? 我相信大家所在的公司肯定都有统一认证的接口方案,先说下常见的认证接口有那两种(我就见过这两种,希望朋友补充):
第一种,公司的各个平台通过ldap连入windows ad目录,或者是连入特定的db。 当时这样很不安全,如果我是开发者的话,用户输入用户名和密码的时候,点击登录,我完全可以把账号密码给print出来。有条件的话,推荐用openldap独立一个用户库。
第二种,就是Passport的方案,算是统一认证,一般是oauth,但是oauth相对麻烦点。大家有时候,要登录论坛的时候,他会提示可以用qq,支付宝,人人的账号登录。 我现在的方案就是类似这种的方法,好! 下面说下,我对这个统一认证的接口使用。
我自己也写过一个 统一认证平台接口,是基于cookie方式的,实现的方法相对简单,但是很有效,安全方面让安全部门测试过,在一定条件下,还是很安全的。在以前公司开发的多个平台也都接入了这个统一认证。
Hello,注意了,原文地址是,blog.xiaorui.cc
语言:python
框架:tornado
模块:requests,flask-admin,oauth2
组件:redis,mysql
前端:Bootstrap
对于python oauth2的方案,可以看 https://github.com/simplegeo/python-oauth2
1、得到授权码code 2、获取access token 3、通过access token,获取OpenID 4、通过access token及OpenID调用API,获取用户授权信息
这里的方案不是oauth2,因为oauth2更多的是给大批的第三方应用设计的,咱们这里只是做passport认证,用oauth2显得不是太合适。
集群平台clusterops clusterops.xiaorui.cc,中心认证passport.xiaorui.cc为例,
1. 判断用户是否登录,已经在passport登录的话,可以直接访问clusterops,如果没有登录的话,会转跳到 passprot.xiaorui.cc/redirect?urlto=clusterops.xiaorui.cc
2. 当转跳到 passprot.xiaorui.cc/redirect?urlto=clusterops.xiaorui.cc的时候,会提示用你的域账户和密码登录,登录成功后,会再次转跳到 clusterops.xiaorui.cc/api?res=aqggzwnasdzo9kzwsxedclmcksduwe8sdf0d&Token=F3fQk1eTJWu2XbWHEzuXXJ0KoJeH6O
3. clusterops接收api接口的res和Token字段数据,用这两个字段以cookie的方式去访问passport.xiaorui.cc/getuserdata?accesstime=时间戳
4. 统一认证端passport拿到了cookie在redis里面做对比,然后判断access时间,在5分钟之内,符合要求给他return 用户数据,如果不符合,就给他回一个错误数据。
5. clusterops解析了返回的json数据,把username及一些数据,放到session里面,这样用户就完成了认证及登录。
6. 退出的话,可以选择该app,也可以选择清楚sso的单点登录的sesson标记。
看这个流程图比较直观点,一般来说我们只是对于web应用做认证接入,认证后,在这个web应用的所有动作权限,都是在web应用本身做的。如果每个应用和连接都再次向认证系统去验证cookie、session,那就会有瓶颈,所以用saml使两个认证服务器做认证通信 !
上面说的只是统一认证方面的,下面再来说说单点登录
单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。
开源的sso,也有不少,我用过lemonldap这个websso方案,感觉还不错哈。
http://lemonldap-ng.org/documentation
方便用户:从用户实际使用角度考虑
用户使用应用系统时,能够一次登录,多次使用。用户不再需要每次输入用户名称和用户密码,也不需要牢记多套用户名称和用户密码。
方便管理员:从日常维护管理角度考虑
系统管理员只需要维护一套统一的用户账号,方便、简单。相比之下,系统管理员以前需要管理很多套的用户账号。每一个应用系统就有一套用户账号,不仅给管理上带来不方便,而且,也容易出现管理漏洞,开发者也不知道用户的账号密码
简化应用系统开发:从应用扩展角度考虑
开发新的应用系统时,可以直接使用单点登录平台的用户认证服务,简化开发流程。单点登录平台通过提供统一的认证平台,实现单点登录。因此,应用系统并不需要开发用户认证程序。
单点登录在这里就很好体现了,只要用户登录了passport统一认证,登录后平台会session标记,只要别的项目指向PassPort认证,那自然而然他们都可以登录了。
捎带角说下,我们一定要再开发一套针对统一认证passport的权限控制,不然每个应用都自己控制admin和guest的权限,这样该又乱套啦! 这段时间我也搞了一套权限管理接口,可以配套在统一认证接口上,权限控制的很细,一个页面,一个菜单,一个动作都可以控制。
到这里基本写完了,这里是我自己对于运维平台的统计认证,sso单点登录,权限管理的理解。 我相信,我的这篇文章更加适合新手理解,当然也有些描述不对的地方,请大神指正 !
恩…这个到底有没有用到oauth2呀?
OAuth是用来授权的(俺可以授权一个网站访问俺在另外一个网站的数据,而俺不用把俺的密码给第一个网站。 CAS一般来说,是把所有的权限的给与,但是Oauth2的话,可以具体给你很细的权限
你上面有段话是“这里的方案不是oauth2,因为oauth2更多的是给大批的第三方应用设计的,咱们这里只是做passport认证,用oauth2显得不是太合适。” 所以,你这个统一认证平台接口,是基于cookie方式的吗?
可以这么理解!!!
能学习下源码吗?
恩,有的 我的github里面,有个用flask实现的cas的代码, 你可以参考下
找到了。我去学习下。
还有其他的吗?这个我之前看到过。原来出自你这里呀。
还有源码吗?非常非常想学习一下。