企业内网,建立在企业内部,为员工提供信息的共享和交流,为业务提供运营和管理的支撑,已是当今企业信息化建设必不可少的一个项目。随着企业的规模越来越大,业务越来越广,系统建设就显得尤为重要。
一、系统的功能
1.用户管理
在企业中,每个用户都有一个唯一的账号进行登录,用户的账号和个人身份信息(包含姓名、邮件等公共属性)会集中保存在内网统一认证系统里。但对于同一个用户在外部系统中的账号,如微信、钉钉、tower等第三方系统,统一认证系统也可以通过定时同步或实时查询等方式获取到用户的信息。小编这里有个群:103456743!大家可以加下,里面遍布了全国各地的学习者!为大家提供一个交流平台,不管平时有碰到什么bug或者学习过程中卡壳,找不到人替你解决?那么就进来吧,里面热心的小伙伴还是非常多的,管理也是挺好的,有什么问题,他如果有时间都能给大家解决,我觉得是一个非常不错的交流平台,没事也可以和大家扯扯公司的事学校发生的趣事,群文件已经上传了好多g的资料,pdf,视频 安装工具,安装教程都是有的,为了大家的学习能更进一步!也为了大家能愉快的交流,讨论学术问题!所以你还在等什么呢?好了马上给大家带来正文!
二、系统架构设计
1.接口设计
企业内网的统一认证平台建议基于b/s模式设计,后端使用django框架以快速开发,用db+ldap方式完成用户各类信息的存储,保障存储和查询效率。 统一认证的核心问题是鉴权中心和各子系统之间的通信接口问题,用户认证接口协议可以基于标准化http/https方式实现,并对外提供不同语言的sdk(如python cas库、java web过滤器等),使得第三方业务系统的接入不完全依赖于特定的开发环境。
(2)ldap技术
轻型目录存取协定(英文:lightweight directory access protocol,缩写:ldap)是一个开放的,中立的,工业标准的应用协议,通过ip协议提供访问控制和维护分布式信息的目录信息。
目录服务在开发内部网和与互联网程序共享用户、系统、网络、服务和应用的过程中占据了重要地位。例如,目录服务可能提供了组织有序的记录集合,通常有层级结构,例如公司电子邮件目录。同理,也可以提供包含了地址和电话号码的电话簿。
由上图架构所示,一方面常见的办公系统(如代码仓库、wiki等)自身即支持ldap认证,通过配置windows ad中的目录/用户搜索规则即完成对登录用户的认证;另一方面自行开发的业务系统通过中央认证服务器提供的接口间接的对windows ad进行登录用户的认证,即一个用户,一套密码,在多个系统中都可使用。
2.身份认证
(1)通过外部应用认证
外部应用,如即时通讯软件钉钉等,这些应用存有单独的一套用户凭证,通过应用提供的免登服务,将应用中的用户与统一认证服务器中的用户进行一一对应,当用户在外部应用中登录后,自动获得在企业内应用的已登录状态。
(2)通过totp动态验证码认证
otp (one-time password) ,一次性密码,也称动态口令。它是使用密码技术实现在客户端和服务器之间共享秘密的一种认证技术,是一种强认证技术,是增强目前静态口令认证的一种非常方便的技术手段,是一种重要的双因素认证技术。
totp (time-base one-time password) ,基于时间的一次性密码,也称时间同步的动态密码。当在一些用户不方便输入密码或者忘记密码的场景中,我们可以使用totp进行认证。服务器和用户各自保管共同的密钥,通过比对基于时间分片与哈希计算出的动态数字验证码即可完成对用户身份的认证。主流实现为google authenticator(google身份验证器),阿里的身份宝也兼容该算法。
图-4:totp算法图示
(3)双因子认证
双因子认证(two-factor authentication)是指结合密码以及实物(信用卡、sms手机、令牌或指纹等生物标志)两种元素对用户进行认证的方法。
(4)token-based
口令认证,比如 ftp 、邮件服务器的登录认证,这是一种简单易用的方式,实现一个口令在多种应用当中使用。
基于网关
基于 saml
ticket-based(基于票据)
4.buc实践
在我们的内网应用中,最终选择了cas协议作为单点登录的方案。cas(central authentication service)是 yale 大学发起的一个企业级的、开源的项目,旨在为 web 应用系统提供一种可靠的单点登录解决方法。cas开始于2001年,并在2004年12月正式成为ja-sig的一个项目。
cas的主要特点有:
开源
支持多种认证机制:active directory、jaas、jdbc、ldap、x.509等
安全策略:使用票据(ticket)来实现支持的认证协议
支持授权:可以决定哪些服务可以请求和验证服务票据
提供高可用性
支持多种客户端及sdk: java, .net,php,python,nodejs 等
服务端也有多种语言实现
(1)登录验证流程
图-6:用户、cas客户端、服务端三方交互过程
(2)安全扩展
当cas服务端完成了对用户和cas客户端的验证之后,cas服务端将验证后的用户信息传输给cas客户端(目标应用),同时也可根据配置返回该应用下的附属用户信息,如用户拥有的该应用下的角色、权限和属性。目标应用根据服务器返回的用户信息进一步检查用户可访问的资源,适当的展示业务视图。
四、acl使用技术和实现
在现代企业,尤其是互联网企业中,产品业务繁多,对数据安全、访问控制都提出了很高的要求,基于用户组织结构、汇报线等传统的分组模式已经无法适应和满足多变的互联网扁平化管理模式的需要,因此我们选择了基于角色和权限的动态分组来设计和实现企业中不用应用可以共享的安全访问管理系统。
1.权限
权限是针对资源和操作层面的最小安全访问控制单元,例如:
按资源分,可以设置访问设备a、访问设备b等。
按操作分,可以设置读取文件,写入文件等。
例-1:权限分类示意图
2.角色
角色是针对应用使用者来设置的,可分为管理员、技术人员,普通用户等,也可按区域分为华北员工、华南员工等。
角色是一系列权限的集合,拥有某角色的用户即应当自动拥有该角色下包含的权限。
图-7:角色与权限关系示意图
3.属性
属性是针对用户层面下设置的独立的安全设置,用来扩展和实现更细粒度的自定义安全设置数据,如将可访问数据细化到数据库中的表、数据表中的行、列上。
得益于json的兼容性,可以很灵活的存储下这些自定义的结构化数据。
例-2:用户属性示意图
4.acl实践
1.数据库建模
依模型图可以看出,一个应用可划分多个角色、权限、路径和属性,其中角色又可包含同应用下的权限和路径。一个用户对应一个acl,通过将不同的控制单元授予用户,即可完成用户的访问控制配置。
如有侵权请联系小编删除!