友户通作用友云的用户系统也一年多了,常常听实施、售前等说要私有化部署友户通,缘由无非是企业的考虑到用户安全性和单一用户帐号的需求。但因为用户管理的复杂性,友户通部署与维护并不容易,所以常常纠结在用户系统是用友户通云服务仍是要私有化部署。前端
企业私有化IT服务服务发展到几天已经很丰富,企业内部可能部署了几十上百的应用程序,企业对于这些应用的用户一般采起统一的用户中心来进行管理。算法
针对这种状况,友户通特定开发了联邦用户中心来支持企业的自有用户中心。让咱们一块儿来看看这个联邦用户中心是如何支持企业自有用户中心的。json
1、为何要使用联邦身份认证跨域
未使用联邦身份认证时浏览器
o企业自有用户中心的用户不能访问用友云各个应用安全
企业应用有本身的用户中心(如下称为:自有IdP),经过自有IdP认证的用户没法直接访问用友云。网络
o用户管理复杂并发
管理员须要分别在两个系统中为用户建立帐号。jsonp
o用户操做繁琐加密
用户访问两个系统时须要使用两个系统的帐号登陆,须要记住两套密码。
使用联邦身份认证后
o自有IdP用户能够直接访问用友云
用户在企业自有IdP认证经过后,可直接访问用友云应用,无需再次通过友户通认证。企业管理员也无需在友户通中重复建立用户。
o用户管理简单
企业管理员只须要在企业自有IdP中为用户建立帐号,用户便可同时访问两个系统,下降了管理复杂度。
o用户操做方便
用户在本企业IdP中登陆便可访问企业应用和用友云应用,使用方便,流畅。
o深度融合
企业内部应用与用友云在用户系统上已经打通,在用户打通的基础上可根据场景进行进一步的融合。
2、友户通支持哪些种类的企业IdP
目前友户通已经支持了LDAP、CAS、OAuth2等标准协议的企业IdP,还支持友户通自定义的Token机制的IdP.除了友户通自定义的Token机制支持的企业IdP须要必定的开发量,其余协议的企业IdP只须要在友户通进行配置就可使用了,彻底不须要进行开发。
友户通的联邦用户身份认证将来还将继续扩展所支持的协议,很快就会增长对SAML2协议的支持。SAML2协议将不须要友户通和企业IdP之间有直接网络链接就能够进行联邦用户身份认证。
3、使用友户通的联邦身份认证有什么体验
体验一:部署实施简单
只须要三步甚至两步就能够部署实施完成企业IdP与友户通的集成
步骤一:根据须要部署yhtagent(企业IdP在内网,而友户通须要访问企业IdP)
步骤二:在友户通中配置联邦身份认证。
步骤三:在访问用友云的连接里加上thirducid参数(参数值由第二步肯定)。
联邦身份认证中心配置界面
体验二:用户使用方便
步骤一:登陆企业IdP(LDAP用户中心则可直接在友户通登陆界面经过特殊用户名进行登陆)。
步骤二:在同一个浏览器里打开带thirducid参数的用友云连接地址,就可登陆用友云。
企业用户在内部应用和用友云应用之间的切换很是方便。
对于企业客户来讲,其员工信息能够获得保护,云服务的实施变得更加简单。
4、技术挑战与实现
挑战一:支持LDAP协议的企业IdP时,如何肯定用户应该在哪里验证。
企业内部的用户管理常用AD域来管理,其支持LDAP协议来进行用户查询,用户名密码验证等。
友户通支持经过LDAP协议使用企业内部的支持LDAP协议的用户中心帐号进行登陆。LDAP协议已经很成熟了,对接起来并不难,麻烦在于何时,去哪一个LDAP用户中心验证用户。针对这个问题,咱们使用了两种方式来解决。
支持方式一:经过特殊用户名来肯定企业IdP
在配置LDAP用户中心时,为每一个LDAP用户中心配置一个惟一标识符,在登陆的用户名,加上一个“@”符号和惟一标识符,这样,友户通就能识别这个用户是须要使用哪一个LDAP用户中心去验证了。这种方式适合主动打开用友云服务的应用,在登陆主动输入域帐号进行登陆。
支持方式二:经过URL里的参数来肯定企业IdP
在访问登陆页面的URL里增长一个参数thirdUCId,这样在友户通系统里,经过thirdUCId查询到的企业IdP是LDAP用户中心,就能够到相应的地方去验证用户了。这种方式适合在企业内部的系统里嵌入URL连接穿透到用友云服务的场景。
挑战二:如何从企业IdP单点登陆到用友云
不少企业通过了不少轮的信息化,部署了不少应用,企业为了方便员工帐号管理及登陆管理,一般采用支持单点登陆的用户系统来统一管理用户帐号,及支持单点登陆。
这些企业若是也购买了用友云的应用,企业须要使用本身的用户帐号进行登陆,以方便进行用户管理。
针对这种需求,友户通支持CAS、OAuth、SAML标准的单点登陆用户中心,登陆了企业自有用户中心后可以直接登陆用友云,而不须要再次输入用户名和密码。
支持方式一:使用CAS协议
友户通和企业IdP之间,走标准CAS协议,即友户通到企业IdP申请发放ticket,企业IdP发放ticket以后重定向到友户通,友户通到企业IdP验证ticket,验证成功后便可登陆友户通。
企业IdP负责发放ticket和验证ticket并返回用户信息,友户通的负责向企业IdP申请发放ticket,获得ticket后调用企业IdP验证验证ticket并获得用户信息,并让用户登陆到友户通中。
友户通在申请企业IdP发放ticket和验证ticket过程当中,浏览器主页面处于等待状态,子页面iframe负责申请发放ticket和验证ticket的接口调用。
该方式实现的难点
一、怎么肯定去哪一个企业IdP申请ticket从而登陆呢?咋们来个故技重施,经过URL里的一个参数thirducid来决定去哪一个企业IdP去申请发放ticket.
二、友户通登陆页既要在已经登陆了企业IdP时可以自动登陆,又要在未登陆企业IdP时显示友户通登陆界面,两方又不在同一个域里,如何作到跨域呢?这里,咱们使用了一个巧妙的方式,也是充分利用CAS标准。在CAS用户中内心,若是已经登陆的话,将会发放ticket,而且重定向到service参数指定的url上。前端登陆界面开启一个iframe去企业IdP申请ticket,同时service地址为友户通接口,这个接口验证企业IdP发放的ticket,并发放一个友户通登陆token,返回一个页面将父页面(登陆页面)导航到友户通自动登陆url,从而登陆进入友户通。
图1-2 友户通集成企业IdP协做图
下面咱们来看看具体是怎么实现的。
(1)企业IdP配置。将企业IdP的信息配置到友户通中,包括企业IdP的ticket发放地址,验证地址,用户信息的格式,以及发放ticket和验证ticket时须要的一些参数的配置,以便在单点登陆过程当中使用。
(2)登陆服务申请企业IdP发放ticket.登陆服务经过url里的参数thirducid,查询到企业IdP的相关配置,将申请发放ticket的地址ticketrequesturl提供给前端JavaScript,前端JavaScript打开一个隐藏的iframe,将iframe的src设置为ticketrequesturl,企业IdP将检测浏览器是否登陆过且有效,若是登陆过且有效,则发放ticket,跳转到ticketrequesturl里的service参数的地址上,该地址为IT服务里的验证企业IdP ticket接口。
(3)验证企业IdP ticket接口(第(2)条里用来做为service地址)。本接口接收企业IdP发放的ticket,以及表明那个企业IdP的thirducid,经过调用相应的企业IdP的验证ticket的接口,若是ticket合法,企业IdP会返回相应的用户信息,友户通将根据配置解析出用户信息,产生一个友户通单点登陆token(友户通的登陆服务接口可经过此token单点登陆到友户通中),并返回一个页面(运行在iframe中),此页面将会将父页面重定向到友户通的登陆服务接口(包含友户通单点登陆token),走完标准友户通的单点登陆流程后将登陆进入到友户通。
支持方式二:使用OAuth2协议
使用OAuth2协议和CAS协议差异不大,只须要将CAS协议中申请Ticket替换成申请code,验证ticket替换成经过code获取accessToken及用户信息便可。
挑战三:如何从友户通单点登陆到企业IdP
先登陆友户通,而后登陆企业IdP.若是实现了企业IdP登陆到友户通,那么天然会有需求从友户通登陆到企业IdP.不过,这种方式须要企业IdP作一些定制开发。
友户通目前支持CAS、oauth2标准协议以及友户通自定义协议可供企业IdP集成。将来将支持SAML2的协议供企业IdP集成。
友户通提供前端登陆状态检测js(支持jsonp),可检测友户通是否已经登陆以及进行CAS发票。
友户通还提供了js方法获取oauth2的code(支持jsonp),供oauth2方式进行单点登陆实现。
挑战四:企业用户中心外网没法访问
企业自有用户中心一般是部署在企业内网的,外网访问不了。这种状况通常有几种解决方式。
第一种:让企业开辟外网端口,让外网能访问,但这种方式会让企业的内部用户中心暴露在公网,企业可能会有必定的顾虑。
第二种:将外网调用变成内网调用,在企业内部部署一个应用当作中介,只暴露这个新部署的应用。
咱们选择了第二种方式,这种方式不会暴露企业的用户中心到公网上,打消企业的顾虑。须要开发一个应用当作中介,咱们称为代理(下称yhtagent)。yhtagent和友户通直接的通讯采用HTTPS保密通讯,若是企业还嫌不够安全,能够在消息内部在使用AES或者RSA等对称或者非对称加密算法进行加密,从而保证通讯内容的绝对安全。
使用YhtAgent时的联邦身份认证
LDAP类型的用户中心,Yhtagent实现友户通到企业单向代理;CAS类型的用户中心,Yhtagent实现友户通到企业双向代理。