郑昀 基于朱传志的设计文档 最后更新于2014/11/13

关键词:LDAP、认证、权限分配、IdCenter、

本文档适用人员:研发
 
曾经一个IT内部系统配一套帐号体系和授权
  线上生产环境里,技术人员需要登录许多内部系统,如:
  • memcached/redis/mongodb 的管控系统
    • 譬如我得有个把线上某个 memcached 的某个业务端口下某个/某些键值清空的 Web 界面吧;
    • 譬如我得有个查出某个缓存键值并选择用哪一个Java Class反序列化的功能吧;
  • jobcenter/notifyserver/推荐评测 的控制台
  • dubbo 的服务治理控制台
  • 持久化配置中心  的控制台
  • CobarManager 控制台
  • ……
  每个IT系统都是不同人开发的,如果每个人都设计自己的用户体系和RBAC权限体系,第一重复制造轮子浪费体力,第二大家需要记住无数系统入口和帐号密码,第三每当有离职时还得记得逐一禁用账户。
 
  所以在 JobCenter/NotifyServer/Diamond/Dubbo 等陆续上线后,孟珂和传志于2013年又开始运作起内部统一认证系统。
 
IdCenter 要干什么?
  目标是建立一个内部各个管理系统能统一使用的用户认证和权限管理中心,以提高各个内部系统的安全性,并统一和简化内部系统的权限开发工作。具体包括:
  1. 进行内部管理系统的统一用户认证和各种权限管理;
  2. 兼容现有的各个内部管理系统;
  3. 记录部分系统访问日志。
  用户来自于哪里?是 IdCenter 自己创建出来的?不。是运维在 UNIX/Linux 环境下通过 OpenLDAP 配好 LDAP 服务,IdCenter 根据 LDAP 协议同步用户过来。这样有几个好处:
  • 开启用户、禁用/删除用户只需要在一个集中的地方做;
  • 不仅仅研发的内部管理系统可以用,运维 DevOps 的内部管理系统也可以用这套用户体系;
  • 不需要重复制造轮子。
  注意不是自动同步,而是手动同步,如下图所示:
图0 同步LDAP数据
 
 系统分为两部分:
  • 认证中心:
    • 用户登录和密码修改
    • 控制界面,可以对用户和权限进行设置
    • 接收过滤客户端的权限验证请求,并作出判断
  • 过滤客户端(filter):
    • 安装在各个内部管理系统中
    • 过滤用户的访问请求
    • 向认证中心发起用户和权限认证请求
    • 根据认证中心回复阻拦或放行用户访问请求
  业务流大致如下:
图1 授权方式
  由于内部系统可能是 Java/PHP/dotNET/Python 等开发语言,所以要求权限检查接口具有跨语言跨平台性,于是朱传志的权限检验接口统一提供为 HTTP+Json 格式调用。
  为了保证校验效率,IdCenter 使用内存缓存以提高权限验证时间,它缓存下面两项内容:
  • 用户->组List
  • URL->组List
  它使用常用驻留和设置过期方式,校验会在两个组List之间进行比对 。
 
 
IdCenter 怎么控制权限?
  由于不愿意在权限控制时涉及各个管理系统的业务逻辑,所以朱传志约定权限是针对 URL(或者说是 URI) 的,如下图2所示,首先我们会录入要管辖的管理系统的 URL。
图2 录入各种URL
  然后我们要设定用户组,如下图3所示:
图3 设置分组
  点击“设置URL”按钮,我们为这个分组设定它都可以对哪些 URL 有权限访问:
图4 为分组设置URL
  还可以为分组设置该用户组都包含哪些用户:
 
图5 为分组设置用户
 
IdCenter 的记录访问日志功能
  我们终于可以在一个集中的地方看到内部各个管理系统的登录日志了,嘿呀:
图6 登录日志
  我们还可以按用户来查看他于什么时间使用了哪些权限(也就是访问了哪些登记在册的 URL):
 
图7 权限日志
  好了,最后我们看一下完整的 IdCenter 首页吧:

图8 首页
 
  这就是 IdCenter,一个为了不重复制造轮子而制造出来的解决方案。
 
-over-
 
欢迎订阅我的微信订阅号『老兵笔记』,请扫描二维码关注:

#研发解决方案介绍#IdCenter(内部统一认证系统)的更多相关文章

  1. #研发解决方案介绍#Tracing(鹰眼)

    郑昀 最后更新于2014/11/12 关键词:GoogleDapper.分布式跟踪.鹰眼.Tracing.HBase.HDFS. 本文档适用人员:研发   分布式系统为什么需要 Tracing?   ...

  2. #研发解决方案介绍#基于StatsD+Graphite的智能监控解决方案

    郑昀 基于李丹和刘奎的文档 创建于2014/12/5 关键词:监控.dashboard.PHP.graphite.statsd.whisper.carbon.grafana.influxdb.Pyth ...

  3. #研发解决方案介绍#基于ES的搜索+筛选+排序解决方案

    郑昀 基于胡耀华和王超的设计文档 最后更新于2014/12/3 关键词:ElasticSearch.Lucene.solr.搜索.facet.高可用.可伸缩.mongodb.SearchHub.商品中 ...

  4. #研发解决方案介绍#Recsys-Evaluate(推荐评测)

    郑昀 基于刘金鑫文档 最后更新于2014/12/1 关键词:recsys.推荐评测.Evaluation of Recommender System.piwik.flume.kafka.storm.r ...

  5. 云方案,依托H3C彩虹云存储架构,结合UIA统一认证系统,实现了用户数据的集中存储和管理

    客户的声音 资料云项目在迷你云基础上二次开发,通过使用云存储技术及文件秒传技术,对文件进行统一存储与管理,以达到节约文件管理成本.存储成本目的:通过有效的文件版本控制机制,以达到风险管控的目的:通过多 ...

  6. 金瓯无缺江河一统|Win10系统基于Docker和Python3搭建并维护统一认证系统OpenLdap

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_180 OpenLdap(Lightweight Directory Access Protocol)是什么?它其实是一个开源的.具 ...

  7. Laravel5中集成Jasig cas统一认证系统

    CAS : CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架,这里介绍下我刚在laravel5上搭建成功的cas.提前准备工作:可运行 ...

  8. CAS统一认证系统学习

    Yale CAS(耶鲁集中认证服务)简介 http://www.5iops.com/html/2012/sso_0713/181.html 单点登陆框架CAS的研究 http://www.cnblog ...

  9. #研发中间件介绍#异步消息可靠推送Notify

    郑昀 基于朱传志的设计文档 最后更新于2014/11/11 关键词:异步消息.订阅者集群.可伸缩.Push模式.Pull模式 本文档适用人员:研发   电商系统为什么需要 NotifyServer? ...

随机推荐

  1. JavaWeb:EL表达式

    JavaWeb:EL表达式 说明 1.Expression Language语言,一种用于JSP文件中的数据访问的语言. 2.能够简化JSP文件中该数据访问的代码,可用来替代传统的基于<%= % ...

  2. 1Z0-053 争议题目解析481

    1Z0-053 争议题目解析481 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 481.Which statement is true about a running sessi ...

  3. JS实现输入框只能输入数字

    键盘下落事件实现输入框只能输入数字: <script type="text/javascript"> // 实现输入框只能输入数字 function ValidateN ...

  4. Cesium原理篇:2最长的一帧之网格划分

    上一篇我们从宏观上介绍了Cesium的渲染过程,本章延续上一章的内容,详细介绍一下Cesium网格划分的一些细节,包括如下几个方面: 流程 Tile四叉树的构建 LOD 流程 首先,通过上篇的类关系描 ...

  5. 使用VS Code开发调试.NET Core 多项目

    使用Visual Studio Code(VS Code)开发调试.NET Core和ASP.NET Core 多项目multiple project. 之前讲解过如果使用Visual Studio ...

  6. .net线程池内幕

    本文通过对.NET4.5的ThreadPool源码的分析讲解揭示.NET线程池的内幕,并总结ThreadPool设计的好与不足. 线程池的作用线程池,顾名思义,线程对象池.Task和TPL都有用到线程 ...

  7. css3全屏背景图片切换特效

    效果体验:http://hovertree.com/texiao/css3/10/ 一般做图片切换效果,都会使用JS或者jQuery脚本,今天发现,其实只用CSS也可以实现.试试效果吧. 效果图: 代 ...

  8. 策略模式 - Strategy

    Strategy Pattern,定义算法家族,分别封装起来,互相之间可替换,此模式让算法的变化不会影响到使用算法的客户端. // 上下文类(Context):用一个ConcreteStratege来 ...

  9. 【C#进阶系列】28 基元线程同步构造

    多个线程同时访问共享数据时,线程同步能防止数据损坏.之所以要强调同时,是因为线程同步问题实际上就是计时问题. 不需要线程同步是最理想的情况,因为线程同步一般很繁琐,涉及到线程同步锁的获取和释放,容易遗 ...

  10. WEB前端--背景相关知识点总结

    一.背景(background) 它是单一属性 但是它衍生出很多的复合属性 background-color  背景色 background-image 背景图片 background-repeat ...