郑昀 基于朱传志的设计文档 最后更新于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. Visual Studio常用小技巧一:代码段+快捷键+插件=效率

    用了visual studio 5年多,也该给自己做下备忘录了.每次进新的组换新的电脑,安装自己熟悉的环境又得重新配置,不做些备忘老会忘记一些东西.工具用的好,效率自然翻倍. 1,代码段 在Visua ...

  2. struts2学习笔记--ActionContext对象

    什么是ActionContext? ActionContext是Map结构的容器,ActionContext是Action的上下文,类比ServletContext,存放着Action执行过程中的数据 ...

  3. jQuery-1.9.1源码分析系列(二)jQuery选择器续1

    在分析之前说一点题外话. ownerDocument和 documentElement的区别 ownerDocument是Node对象的一个属性,返回的是某个元素的根节点文档对象:即document对 ...

  4. 你的日志组件记录够清晰嘛?--自己开发日志组件 Logger

    现在现成的日志组件实在是太多太多,为什么我还需要自己实现呢????? 需求来源于java的log4j, [07-31 16:40:00:557:WARN : com.game.engine.threa ...

  5. 10.Configure One-to-Many(配置一对多关系)【Code-First系列】

    现在,我们将学习怎么配置一对多的关系. Visit Entity Relationship section to understand how EF manages one-to-one, one-t ...

  6. Windows Server 2012 R2在线安装.NET Framework3.5

    Windows Server 2012 (R2) 默认没有安装 .NET Framework 3.5,但可以通过在线安装或指定备用源路径方式. 之前在这个 在Win Server 2012中安装.NE ...

  7. JS基础之对象

    JS中一切皆为对象,这是一句常说的话.了解JS对象,从这句话开始吧.JS中的基本数据类型如number,bool,字符串,数组,null,undefined等等都是对象. 对象的本质: 带有属性和方法 ...

  8. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

  9. Servlet转码问题

    HttpServletRequest获取页面数据 提交表单时,Servlet直接从页面通过HttpServletRequest对象的getParameter(String arg0)获取参数时 默认编 ...

  10. Java--FutureTask原理与使用(FutureTask可以被Thread执行,可以被线程池submit方法执行,并且可以监控线程与获取返回值)

    package com; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; i ...