IDM身份管理平台是满足于企业身份管理、统一认证的安全管控平台 ,它基于5A管控体系(认证Authentication、授权Authorization、账号Account、审计Audit、应用Application)实现企业的统一认证和管理,主要为企业构建统一的登录入口和认证体系。而且5A体系中,统一账号、统一认证和统一权限又是比较常用有需要跨系统集成的内容,其中统一账号是基础,用来保证登录账号一致;统一认证是应用,用来实现单点登录、统一访问;统一权限是深化,在统一账号的基础上实现权限的集中管理。
IDM作为统一认证入口,为了满足不同系统的对接需要,预置有CAS、OAuth、接口等几种认证方式,几种方式各有利弊,但基本上能满足绝大多数系统认证集成的需求。最近由于项目环境需要,需要将IDM与云星空进行集成, 实现云星空基于IDM的单点登录 ,针对配置过程以及相关的扩展内容进行整理记录。
总体说明
IDM身份管理平台以5A管控为核心,搭建统一的安全管控平台,以实现内部系统的统一管控等需求,其中又以统一用户、统一认证和统一权限为主要集成点。
1.整体架构
IDM平台的整体架构以5A(统一用户、统一认证、统一授权、统一审计、应用管控)为基础,结合 用户管理、认证管理、BPM工作流 等机制实现IDM平台与上下游系统的打通。
IDM的用户数据一般来源于权威的账号数据库,如人力资源或OA系统,通过数据集成将用户以及部门、岗位等数据同步到IDM,IDM统一管理用户并制定相应的安全策略,再将相关数据分发到下游系统,实现上下游系统的统一整合。
2.集成内容
IDM的集成点主要在于统一用户、统一认证、统一授权三个层面:
1. 统一用户 :以HR、OA等系统为源头,将用户数据同步到IDM平台,或者在IDM中手动新增账号,通过IDM实现账号的统一管理维护,再将账号分发下游系统;
2. 统一认证 :IDM提供CAS认证、OAuth认证、接口认证等多种认证标准,可以满足绝大多数认证场景需要,业务系统通过和IDM平台实现统一认证,从而实现单点登录,只需要登录一次就能访问不同的业务系统;
3. 统一授权 :以IDM为源头,对角色、权限进行统一管理,并通过数据接口的方式将角色、权限以及关联关系等下发到不同的系统中,从而实现业务系统功能权限、数据权限、接口权限的统一管理。
3.认证模式
IDM提供三种认证方式,分别是 CAS认证、OAuth认证和接口认证 ,对于不同架构的系统,推荐采用不同的认证方式(CAS认证、OAuth认证使用IDM的统一登录界面,接口认证则使用业务系统本身登录界面)。
需求分析
本次对接主要是验证IDM与云星空平台的统一认证实现,所以主要进行统一认证配置,用户通过手动创建的方式保持统一,暂时不做统一用户的同步处理。
1.需求说明
1.在本地搭建IDM和云星空的测试环境,并且保证可以独立进行登录访问;
2.以IDM作为统一认证入口,通过对云星空平台进行扩展,实现云星空与IDM的统一认证实现;
3.通过相同的测试账号,保证登录IDM平台后可以直接访问云星空的Web端;
4.在未登录IDM和云星空的情况下,访问云星空可以直接跳转IDM的登录页,登陆后可以自动回跳云星空Web端;
5.使用普通账号通过单点登录进入云星空平台后,可以 自动加载权限 ,控制用户的访问权限。
2.实现思路
1.本次对接采用OAuth认证的方式实现,通过调用IDM的OAuth接口获取用户信息,进行用户登录和权限初始化;
2.由于云星空采用C#语言开发,所以需要通过VS开发云星空的组件,通过组件实现页面访问以及接口调用;
3.根据云星空提供的相关资料,云星空可以通过免登URL的方式直接访问平台,并自动实现权限初始化,所以主要是通过开发组件构建云星空的免登URL;
4.在云星空中扩展两个插件: 一个用于登录拦截,一个用于OAuth接口调用 ;
5.登录拦截Kingdee.SSO.SSOLoginModule:
(1)登录云星空平台时判断是否登录,未登录则跳转IDM登录页面;
(2)跳转地址通过URL进行拼接,拼接OAuth的authorize地址;
(3)authorize的URL中,redirect_uri指向OAuth接口调用插件的地址。
6.接口调用Kingdee.SSO.LoginService.ServicesStub:
(1)扩展3个方法,ExecuteGetAccessToken用于获取accessToken,RetrieveProfile用于获取用户信息,PassportLogin用于拼接星空的免登地址;
(2)ExecuteGetAccessToken方法中先获取request,并从request中获取code;
(3) 根据code拼接url ,调用IDM接口获取accessToken;
(4)调用RetrieveProfile方法,并将accessToken作为参数传入;
(5)根据accessToken拼接url,调用IDM接口获取profile数据;
(6)获取profile后,将profile作为参数调用PassportLogin方法;
(7)在PassportLogin方法中,解析获取用户信息,结合云星空中配置的系统构建云星空免登地址;
(8) 通过redirect直接跳转进入云星空系统 。
3.测试要点
1.未登录的情况下访问IDM,可以登录IDM平台,并直接在浏览器中打开云星空的访问地址;
2.未登录的情况下访问云星空,可以跳转IDM的登录页,登录后可以自动跳转云星空首页;
3.用普通用户登录,登录云星空后可以按照云星空的权限配置自动加载访问权限。
实现过程
根据统一认证的对接思路,本次开发的重点在于云星空的插件开发,需要开发两个插件,同时注意接口调用插件需要支持外部访问,能够通过第一步的回调地址进行跳转。
1.系统配置
由于采用OAuth认证,所以需要先在IDM中配置云星空系统。
1.用admin账号登录IDM平台,在应用配置中添加云星空。
2.配置云星空的 认证信息,返回用户编码、名称 等信息。
2.插件开发
1.开发登录拦截插件Kingdee.SSO.SSOLoginModule,并添加Html5SSOLoginModule类。
(1)添加context_BeginRequest方法,并在Init方法中调用;
(2)在context_BeginRequest中通过访问地址以及请求参数判断是否已登录,未登录则跳转IDM的认证地址;
(3)IDM认证地址中redirect_uri为http://localhost/K3Cloud/Kingdee.SSO.LoginService.ServicesStub.SSOLoginModule.ExecuteGetAccessToken.common.kdsvc。
2.修改KingdeeK3CloudWebSiteWeb.config文件,在//标签中添加。
参见:3.3技术要点。
3.开发接口调用插件Kingdee.SSO.LoginService.ServicesStub,添加方法ExecuteGetAccessToken。
(1) 先从request中解析code ;
(2)通过code拼接IDM的accessToken接口地址;
(3)调用API接口获取accessToken;
(4)以accessToken为入参调用RetrieveProfile方法。
参见:3.3技术要点。
4.添加RetrieveProfile方法。
(1)以accessToken为入参,通过accessToken拼接IDM的profile接口地址;
(2)调用API接口获取profile;
(3)以profile为入参调用PassportLogin方法。
5.添加PassportLogin方法。
(1)将入参解析成json对象,并获取入参中的EMP_CODE(用户编码);
(2)定义lcId、timestamp、dbId、appId、appSecret等信息,并进行签名处理(参见:3.3技术要点);
(3)通过定义的参数以及签名信息进行转换加密处理,并拼接云星空的免登访问地址;
(4)通过Redirect直接跳转免登地址进行访问。
3.技术要点
1.云星空开发的插件以URL的方式访问:
(1)如Kingdee.SSO.LoginService.ServicesStub格式,插件名需要以ServicesStub结尾;
(2)需要调用的方法需要以Execute开头,如ExecuteGetAccessToken;
(3)调用方式:云星空访问地址/插件名.类名.方法名.common.kdsvc。
2.Web.config中插件配置:
name:类名,type: 第一个为类的全路径,第二个为namespace(插件名) ;
3.C#进行API调用。
4.云星空的签名方法。
5.免登参数清单:
(1) dbId :数据中心的ID;
(2) username :用户名称或登录名;
(3) appId :应用程序ID,通过Administrator登录数据中心,在【系统管理】的【第三方系统登录授权】功能进行新增维护;
(4) appSecret :应用密钥,根据应用生成,通过Administrator登录数据中心,在【系统管理】的【第三方系统登录授权】功能进行查看;
(5) signeddata :参考文章【https://vip.kingdee.com/article/37406】;
(6) timestamp :登录时间戳(Unix时间戳,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数);
(7) lcId :语言ID,中文2052(默认),英文1033,繁体3076。
测试验证
根据测试要点对云星空和IDM的统一认证功能进行登录测试,同时新增普通用户进行登录测试,并测试登陆后的访问权限。
1.配置应用
通过Administrator登录数据中心,在【系统管理】的【第三方系统登录授权】中添加应用,并生成密钥。
2.添加用户
1.在IDM中添加新用户,并设置登录密码。
2.访问云星空,在【系统管理】--【用户管理】中添加用户,登录账号和IDM用户编码保持一致,并分配用户权限。
3.用户测试
1.先访问IDM,并用普通用户登录,登陆后直接通过浏览器访问云星空。
登录IDM后可以直接访问云星空,并且用户访问权限已经进行了控制。
2.未登录的情况下直接访问云星空。
登录成功后自动跳转云星空。
总结分析
IDM身份管理平台作为数通畅联的核心产品之一,主要满足5A安全管控需要,在企业的系统整合、统一认证、安全管控等方面提供支撑,并能和ESB、MDM等不同的产品组件形成不同的解决方案,满足实际业务使用的需要。
1.产品功能
IDM平台的主要功能就是统一用户、统一认证、统一授权、统一审计、应用管控的5A管控体系,而其中统一用户、统一认证、统一授权又是系统集成的重点,需要IDM和业务系统配合进行集成,以打通系统之间的连接。
2.方案体系
IDM可以和ESB组合形成统一身份管理方案,也可以和ESB、MDM组合形成企业集成中台方案,或者结合DAP、MDM、ESB、Portal等产品构建企业中台体系方案,但无论哪种方案,IDM的作用都是 作为安全管控环节,保证系统访问的安全性和稳定性 ,只不过在不同的方案中,IDM平台和各个系统的对接方式有所区别。而作为标准化的平台和解决方案,IDM的集成模式基本已经固定,在对接过程中只需要根据对接标准快速配置、部署、测试即可。
3.升级优化
作为专注于安全管控的认证平台,IDM平台的功能相对已经非常全面和成熟,在5A管控的基础上,IDM深化了对于密码策略、登录策略、异时异地、防暴力破解等一系列安全机制,并且对于数据管理、访问登录平台操作等方面的监控、记录、报警等功能也都具备相应的能力,后续IDM的优化更多在于结合实际业务进行细节优化,从使用的便捷性、集成性等角度进行优化,并更多 和不同的业务场景、业务系统集成 ,不断优化集成模式。
而对于实施团队而言,在进行IDM项目实施的过程中,需要不断验证IDM的功能和场景,为产品研发升级提供意见,将标准化、可复用的业务场景、流程纳入到产品方案中,保证后续实施过程中可以快速进行复用和交付,加快实施交付效率的同时保证产品更加人性化、便捷化、敏捷化,提升产品方案在企业业务过程中的促进作用。
本文由 原创,欢迎转发,仅供学习交流使用,引用请注明出处!谢谢~