一种单点登录的方法和装置与流程

文档序号:14253078阅读:185来源:国知局
一种单点登录的方法和装置与流程

本申请涉及网络通信技术领域,特别涉及一种单点登录的方法和装置。



背景技术:

sso(singlesignon,单点登录),是一套统一登录认证的解决方案。在sso系统中,通过整合多个相互受信的子系统,使用户只需要在sso系统中完成一次登录认证后,就可以访问所有相互授信的子系统,真正意义上实现一次登录随处访问。

cas系统,是当前应用最为广泛的一种面向web子系统提供单点登录服务的系统。在cas系统中,cas系统和web子系统之间可以通过共享cookie的方式,来实现单点登录。然而,由于cookie无法跨域访问的特性,使得cas系统无法实现子系统的跨域单点登录。



技术实现要素:

本申请提出一种单点登录的方法,应用于分布式rpc架构的单点登录系统,所述单点登录系统接入了若干子系统,其中所述若干子系统和所述单点登录系统分别对应不同的登录域名;所述方法包括:

接收到任一目标子系统通过url重定向的方式发送的用户登录请求;其中,所述用户登录请求由所述目标子系统在其本地域下的cookie中未读取到共享token时发送;所述用户登录请求携带所述目标子系统的url地址;

响应于所述用户登录请求,从本地域下的cookie中读取所述共享token;其中,所述共享token在所述用户通过所述单点登录系统的登录认证时写入本地域下的cookie;

如果从本地域下的cookie中读取到所述共享token,基于所述目标子系统的url地址通过url重定向的方式将所述共享token返回给所述目标子系统,以由所述目标子系统调用所述单点登录系统的登录认证接口,将所述所述共享token提交至所述单点登录系统发起跨域单点登录认证。

可选的,还包括:

如果从本地域下的cookie中未读取到所述共享token,向所述目标子系统返回所述单点登录系统的登录页面,并获取用户在所述登录页面输入的登录认证信息;

对获取到的登录认证信息进行认证;如果认证通过,生成用于记录登录状态的用户session以及所述共享token,并将生成的所述用户session与所述共享token绑定后写入本地域下的cookie;以及,

基于所述目标子系统的url地址通过url重定向的方式将所述共享token返回给所述目标子系统,以由所述目标子系统调用所述单点登录系统的登录认证接口,将所述共享token提交至所述单点登录系统发起跨域单点登录认证。

可选的,还包括:

在接收到所述目标子系统通过调用所述单点登录系统的登录认证接口提交的所述共享token时,对所述共享token进行认证;

如果所述共享token认证通过,将与所述共享token绑定的所述用户session返回给所述目标子系统,以由所述目标子系统将所述用户session和所述共享token写入其本地域下的cookie完成跨域单点登录。

可选的,所述单点登录系统配置了redis分布式缓存;

所述将生成的所述用户session与所述共享token绑定后写入本地域下的cookie,包括:

在所述redis分布式缓存中创建cookie;

将生成的所述用户session与所述共享token绑定后写入所述cookie。

可选的,所述基于所述目标子系统的url地址通过url重定向的方式将所述共享token返回给所述目标子系统,包括:

生成与所述共享token对应的临时token;

基于所述目标子系统的url地址通过url重定向的方式将所述共享token返回给所述目标子系统;以及,

在接收到所述目标子系统通过调用所述单点登录系统的登录认证接口提交的所述临时token时,对所述临时token进行认证,并在认证通过时将所述共享token以及所述用户session返回给所述目标子系统。

可选的,所述临时token以及所述共享临时token分别被预配置了有效时长;其中,所述临时token的有效时长小于所述共享token。

可选的,所述单点登录系统的系统架构中包括面向web子系统提供接入服务的servletfilter接口;以及,面向app子系统提供接入服务的api接口;接入所述单点登录系统的子系统包括web子系统和基于app的子系统。

可选的,所述单点登录系统为基于dubbo架构的分布式系统。

本申请还提出一种单点登录的方法,应用于子系统,所述子系统接入了基于分布式rpc框架的单点登录系统;其中所述子系统和所述单点登录系统分别对应不同的登录域名;所述方法包括:

响应于用户针对所述子系统的登录请求,从本地域下的cookie中读取共享token;其中,所述共享token在所述用户通过所述单点登录系统的登录认证时写入本地域下的cookie;

如果在本地域下的cookie中未读取到所述共享token,基于单点登录系统的url地址通过url重定向的方式向所述单点登录系统发送用户登录请求;其中,所述用户登录请求携带所述目标子系统的url地址;

如果所述单点登录系统在其本地域下的cookie中读取到所述共享token,接收所述单点登录系统基于所述目标子系统的url地址通过url重定向的方式返回的所述共享token;

调用所述单点登录系统的登录认证接口,将所述所述共享token提交至所述单点登录系统发起跨域单点登录认证。

可选的,还包括:

如果所述单点登录系统在其本地域下的cookie中未读取到所述共享token,接收所述单点登录系统返回的登录页面,并将用户在所述登录页面输入的登录认证信息提交至所述单点登录系统,以由所述单点登录系统对所述登录认证信息进行认证,并在认证通过后生成用户session以及所述共享token;

接收所述单点登录系统基于所述目标子系统的url地址通过url重定向的方式返回的共享token;

调用所述单点登录系统的登录认证接口,将所述所述共享token提交至所述单点登录系统发起跨域单点登录认证。

可选的,所述接收所述单点登录系统基于所述目标子系统的url地址通过url重定向的方式返回的共享token,包括:

接收所述单点登录系统基于所述目标子系统的url地址通过url重定向的方式返回的临时token;其中,所述临时token为所述单点登录系统生成的与所述共享token对应的临时token;

调用所述单点登录系统的登录认证接口将所述临时token提交至所述单点登录系统发起跨域单点登录认证;

接收所述单点登录系统在所述临时token认证通过时,返回的所述共享token以及与用户session,并将所述用户session和所述共享token写入本地域下的cookie完成跨域单点登录。

可选的,所述临时token以及所述共享临时token分别被预配置了有效时长;其中,所述临时token的有效时长小于所述共享token。

可选的,所述单点登录系统的系统架构中包括面向web子系统提供接入服务的servletfilter接口;以及,面向app子系统提供接入服务的api接口;所述子系统包括web子系统和基于app的子系统。

本申请还提出一种单点登录的装置,应用于分布式rpc架构的单点登录系统,其特征在于,所述单点登录系统接入了若干子系统,其中所述若干子系统和所述单点登录系统分别对应不同的登录域名;所述装置包括:

第一接收模块,接收到任一目标子系统通过url重定向的方式发送的用户登录请求;其中,所述用户登录请求由所述目标子系统在其本地域下的cookie中未读取到共享token时发送;所述用户登录请求携带所述目标子系统的url地址;

第一读取模块,响应于所述用户登录请求,从本地域下的cookie中读取所述共享token;其中,所述共享token在所述用户通过所述单点登录系统的登录认证时写入本地域下的cookie;

返回模块,如果从本地域下的cookie中读取到所述共享token,基于所述目标子系统的url地址通过url重定向的方式将所述共享token返回给所述目标子系统,以由所述目标子系统调用所述单点登录系统的登录认证接口,将所述所述共享token提交至所述单点登录系统发起跨域单点登录认证。

本申请还提出一种单点登录的装置,应用于子系统,所述子系统接入了基于分布式rpc框架的单点登录系统;其中所述子系统和所述单点登录系统分别对应不同的登录域名;其特征在于,所述装置包括:

第二读取模块,响应于用户针对所述子系统的登录请求,在本地域下的cookie中查找共享token;其中,所述共享token在所述用户通过所述单点登录系统的登录认证时写入本地域下的cookie;

发送模块,如果在本地域下的cookie中未读取到所述共享token,基于单点登录系统的url地址通过url重定向的方式向所述单点登录系统发送用户登录请求;其中,所述用户登录请求携带所述目标子系统的url地址;

第二接收模块,如果所述单点登录系统在其本地域下的cookie中读取到所述共享token,接收所述单点登录系统基于所述目标子系统的url地址通过url重定向的方式返回的所述共享token;

认证模块,调用所述单点登录系统的登录认证接口,将所述所述共享token提交至所述单点登录系统发起跨域单点登录认证。

通过以上实施例可见,一方面,通过将传统的url重定向机制和cookie机制相结合,使得用户在登录子系统时,可以重定向到sso系统完成登录,并在用户在成功登录sso系统后,可以通过重定向的方式,将sso系统为用户生成的共享token跨域写入子系统所在的本地域下的cookie,从而克服了基于cookie无法实现跨域登录的问题;

另一方面,通过在基于rpc架构的sso系统中面向各接入的子系统提供登录认证接口,使得子系统可以通过远程调用该登录认证接口的方式,将本地域下的cookie中写入的共享token跨域提交给sso系统进行登录认证,从而可以实现跨域的单点登录。

附图说明

图1为本申请示出的一种sso系统的架构图;

图2为本申请一示例性实施例示出的一种单点登录的方法流程图;

图3为本申请一示例性实施例示出的一种sso系统和子系统进行交互完成单点登录的流程图;

图4为本申请一种承载单点登录的装置的sso系统的电子设备的硬件结构图;

图5为本申请一示例性实施例示出的一种单点登录的装置;

图6为本申请一种承载单点登录的装置的子系统的电子设备的硬件结构图;

图7为本申请一示例性实施例示出的另一种单点登录的装置。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

本申请旨在提出一种通过对传统的url重定向机制、cookie机制以及基于token的登录认证机制相结合,来实现跨域单点登录的技术方案。

在实现时,开发人员可以基于分布式rpc框架来搭建sso系统,并将与sso对应不同的登录域名的子系统,通过sso系统提供的接入接口接入到sso系统。

当用户在子系统发起登录时,子系统可以通过验证本地域下的cookie中是否写入共享token,来确定用户是否已经在sso系统成功登录;如果子系统本地域下的cookie中未写入上述共享token,表明用户尚未通过sso系统的登录认证;此时,子系统可以基于sso系统的url地址,通过url重定向的方式,向sso系统发送用户登录请求,并在该用户登录请求中携带子系统的url地址。

当sso系统收到上述用户登录请求,也可以通过验证本地域下的cookie中是否写入共享token,来确定用户是否已经在sso系统成功登录;如果sso系统本地域下的cookie中写入了上述共享token,表明用户已经通过sso系统的登录认证;此时,sso系统可以基于该子系统的url地址,通过重定向的方式将该共享token返回给子系统。

进一步的,sso系统还可以面向各个子系统提供登录认证接口,当各个而子系统在收到sso系统返回的共享token时,可以通过远程调用上述登录认证接口的方式,将上述共享token提交给sso系统,由sso系统对该共享token进行登录认证,以完成跨域的单点登录认证。

在以上技术方案中,一方面,通过将传统的url重定向机制和cookie机制相结合,使得用户在登录子系统时,可以重定向到sso系统完成登录,并在用户在成功登录sso系统后,可以通过重定向的方式,将sso系统为用户生成的共享token跨域写入子系统所在的本地域下的cookie,从而克服了基于cookie无法实现跨域登录的问题;

另一方面,通过在基于rpc架构的sso系统中面向各接入的子系统提供登录认证接口,使得子系统可以通过远程调用该登录认证接口的方式,将本地域下的cookie中写入的共享token跨域提交给sso系统进行登录认证,从而可以实现跨域的单点登录。

以下通过具体的实施方式,对本申请的技术方案进行详细描述。

请参见图1,图1为本申请示出的一种sso系统的架构图。

上述sso系统,具体可以是开发人员基于分布式rpc框架搭建的可以面向各子系统提供单点登录服务的分布式系统。

例如,在一种实施方式中,上述分布式rpc框架具体可以是dubbo框架,开发人员可以基于dubbo框架来搭建上述sso系统。

通过采用分布式架构,方便对接入sso系统的子系统进行扩展,对接入子系统的数量没有限制,能够满足一些需要对大量的子系统进行整合来实现单点登录的场景需求。

其中,在该sso系统的系统框架中,可以搭载能够面向与sso系统对应不同登录域名的各个子系统提供接入服务的接口组件,这些接口组件可以面向各个子系统提供接入接口。需要说明的是,在实际应用中,上述sso系统搭载的接口组件,能够面向各子系统提供的接入接口,具体可以由开发人员基于接入sso系统的子系统的具体类型,来灵活的进行开发。

请参见图1,在实际应用中,为了确保sso系统能同时满足web子系统(比如web应用)、移动端的app子系统(比如移动端的app应用)、以及pc端的app子系统(比如桌面gui应用)等各种子系统的接入需求,上述sso系统所搭载的接口组件,具体可以包括基于分布式rpc框架(比如dubbp框架)开发的servletfilter接口组件和api接口组件。

其中,上述servletfilter接口组件,可以面向web子系统(比如web应用)提供filter接口,web子系统可以通过filter接口来接入sso系统。比如,当接入的系统是一个javaweb项目时,只需要在相关的配置文件(比如web.xml文件)中,配置该filter接口,就可以接入到sso系统。

上述api接口组件,可以面向app子系统(比如,移动端的app用用以及pc端的桌面gui应用)提供api接口,app子系统可以通过api接口来接入sso系统。比如,当接入的系统是一个java项目时,上述api接口组件具体可以是一个api服务包,子系统可以在系统配置文件中配置api服务包中提供的api接口,就可以通过访问该api接口来接入到sso系统。

可见,无论是web子系统还是app子系统,均只需要进行简单的配置,在相关的配置文件中配置相关的接入接口,就可以接入sso系统实现单点登录,不仅能够灵活的满足web应用、移动端的app应用、以及pc端的桌面gui应用等子系统的接入,而且可以极大的提高子系统的接入效率。

请继续参见图1,上述sso系统中,还可以基于rpc框架面向各个子系统分别独立开发对应的api接口作为登录认证接口。各个子系统可以通过调用上述登录认证接口,将登录认证信息作为参数传递至sso系统,由sso系统进行统一认证,来完成在各个相互受信的子系统之间的单点登录。

其中,需要说明的是,各个登录认证接口可以根据接入系统的实际情况进行独立开发,在本申请中不进行特别的限定;

例如,对于高并发的场景,可以基于实际的需求部署多个登录认证接口,并由sso系统基于搭载的负载均衡策略,对该多个登录认证接口所承担的登录认证请求进行负载均衡。

进一步的,为了提升sso系统的访问性能,在上述sso系统的架构中,还可以预先部署分布式缓存;

请参见图1,上述分布式缓存具体可以是基于redis的分布式缓存。在这种情况下,可以从承载上述sso系统的服务器集群中的每一台服务器的内存中,划分出一定的缓存空间,然后将各台服务器分别作为分布式缓存中的一个redis节点(即数据存储节点),并采用相应的一致性算法(比如hash算法),来搭建基于redis的分布式缓存。

通过在上述sso系统的框架中部署分布式缓存,可以将对用户的登录认证数据统一存放在分布式缓存中;例如,sso系统在对用户进行登录认证的过程中,所生成的用于记录登录状态的用户session信息以及与用户session绑定的token信息等,都可以统一存放在分布式缓存中。

从而,sso系统在对用户进行登录认证的过程中,所有的操作都可以在内存中完成,可以极大的提升系统的处理效率,即使在高并发的场景下,sso系统也能迅速的响应用户的登录请求。

例如,在传统的诸如cas系统等sso系统中,对用户的登录认证数据通常是直接保存在数据库中的,sso系统对用户进行登录认证的过程中,可以通过直接访问数据库,来获取用户的登录认证数据,完成对用户的登录认证。而数据库通常都会存在访问的性能极限,因此直接通过访问数据库的方式,在一些高并发的场景下,可能会造成性能过载,使得sso系统面临不能迅速的响应用户的登录请求的性能问题。而通过在sso系统中部署分布式缓存,利用分布式缓存来统一存放用户的登录认证信息,使得sso系统在对用户进行登录认证的过程中,可以不再需要访问数据库,所有的操作都可以在内存中完成,因此可以显著的提升sso系统的访问性能。

以下将以图1中示出的sso系统的架构为例,并通过具体的实施例对本申请中的技术方案进行详细描述。

请参见图2,图2为本申请一实施例提供的一种单点登录的方法,应用于基于分布式rpc架构的sso系统以及子系统;其中,上述sso接入了若干子系统,各子系统与sso系统对应不同的登录域;所述方法包括以下执行步骤:

步骤201,响应于用户针对所述子系统的登录请求,子系统从本地域下的cookie中读取共享token;其中,所述共享token在所述用户通过所述sso系统的登录认证时写入该子系统本地域下的cookie;

步骤202,如果在子系统本地域下的cookie中未读取到所述共享token,子系统基于单点登录系统的url地址通过url重定向的方式向所述单点登录系统发送用户登录请求;其中,所述用户登录请求携带所述子系统的url地址;

步骤203,响应于所述用户登录请求,sso系统从本地域下的cookie中读取所述共享token;其中,所述共享token在所述用户通过所述单点登录系统的登录认证时写入sso系统本地域下的cookie;

步骤204,如果从sso系统本地域下的cookie中读取到所述共享token,基于所述子系统的url地址通过url重定向的方式将所述共享token返回给所述子系统;

步骤205,子系统调用sso系统的登录认证接口,将所述共享token提交至所述sso系统发起跨域单点登录认证。

上述sso系统,可以采用如图1所示的分布式rpc架构,为面向接入的各子系统提供统一的单点登录认证服务。上述子系统,可以通过上述sso系统提供的接入接口接入到sso系统;其中,各子系统与上述sso系统分别对应不同的登录域名;例如,在实际应用中,各子系统与sso系统可以是具有共同的父域的不同域名,也可以是不具有共同的父域的不同域名。

上述共享token,是指用户在通过sso系统的登录认证后,为用户生成的具有一定有效期的登录令牌凭证;比如,可以是一串随机且无实际意义的uuid。当用户通过sso系统的登录认证后,sso系统可以在本地域下的cookie中写入上述共享token,并将该共享token通过url重定向的方式返回给子系统。而用户在登录子系统时,子系统可以基于该共享token向sso系统进行登录认证,并在通过登录认证后,授权用户登录子系统,将该共享token也写入到子系统本地域下的cookie。即在本申请中,上述共享token需要在sso系统和子系统本地域下的cookie中分别进行保存。

请参见图3,图3为本申请示出的一种子系统与sso系统进行交互完成跨域单点登录的流程图。

在初始状态下,当用户在子系统发起登录时(比如,用户访问了子系统中要求用户登录后才能访问的资源),子系统可以响应用户针对子系统的登录请求,解析本地域下的cookie,从本地域下的cookie中读取上述共享token,来确认用户是否已经通过在sso系统的登录认证。

请参见图3,如果子系统从本地域下的cookie中未读取到上述共享token,表明用户尚未通过sso系统的登录认证,此时可能是用户首次访问该子系统,那么子系统可以基于sso系统的url地址,执行一次url重定向,通过重定向的方式,向sso系统发送用户登录请求。其中,该用户登录请求中将携带子系统的url地址。

当sso系统通过子系统在sso系统中的接入接口,接收到子系统通过url重定向的方式发送的用户登录请求后,可以解析本地域下的cookie,从本地域下的cookie中读取上述共享token。

具体的,当用户通过sso系统的登录认证后,sso系统通常会将为该用户生成的用户session和上述共享token绑定后写入本地域下的cookie。当sso系统通过子系统在sso系统中的接入接口,收到上述用户登录请求后,首先可以对该用户登录请求进行解析,检查该用户登录请求中是否携带用户session(比如sessionid);如果该用户登录请求中携带用户session,表明该用户在此之前,已经通过了sso系统的登录认证,此时sso系统将该用户session作为索引,能够从本地域下的cookie中正常读取到与该用户session绑定的共享token。反之,如果该用户登录请求中并未携带用户session,表明该用户在此之前,并未通过sso系统的登录认证,此时sso系统将无法从本地域下的cookie中正常读取到上述共享token;在这种情况下,上述子系统可以发起对该用户的登录认证。

例如,以上述子系统为web子系统为例,子系统在sso系统中的接入接口具体可以是一个filter接口,当该filter通过该filter接口收到用户发起登录认证的httprequest请求后,可以检查该请求中是否携带用户用户session;如果未携带用户session,此时可以调用sso系统提供的登录认证接口(api),发起对该用户的登录认证操作,并在认证通过后将获取到的用户session,再注入到httprequest请求中,然后返回给子系统。

请继续参见图3,如果sso系统从本地域下的cookie中未读取到上述共享token,此时sso系统可以将sso系统登录页面返回给子系统,子系统可以通过浏览器将sso系统的登录页面向用户进行输出,用户可以在该登录页面中输入诸如登录账号和密码等登录认证信息,向sso系统发起登录认证。

而子系统可以获取用户输入的登录账号和密码,将用户输入的登录账号和密码提交至sso系统。sso系统在收到子系统提交的登录账号和密码后,可以对该登录账号和密码进行认证;如果认证通过,此时针对该用户的登录认证通过,sso系统可以为该用户生成上述共享token,以及生成一个用于记录该用户的登录状态的用户session;

一方面,sso系统可以将生成的上述共享token和用户session绑定后写入本地域下的cookie。

其中,在示出的一种实施方式中,为了提升sso系统的处理效率,使得sso系统在高并发的场景下,也能迅速的响应用户的登录请求,对于生成的上述共享token和上述用户session可以写入到sso系统的架构中预先部署的分布式缓存中。在这种情况下,sso系统可以预先将本地域下的cookie创建在分布式缓存中,然后将生成的上述共享token和上述用户session绑定后,写入创建在分布式缓存中的cookie中。

另一方面,sso系统可以基于子系统的url地址,执行一次重定向,将生成的共享token通过url重定向的方式返回给子系统;例如,可以将共享token作为参数拼接在子系统的url之中,返回给子系统。

当然,在实际应用中,如果用户输入的用户名和密码错误,此时sso系统可进行报错,并提示用户重新输入用户名和密码。

其中,由于通过重定向的方式传递参数,被传递参数通常处于一种较为公开的状态,通常会存在一定的安全性;因此,为了确保被传递参数不至于泄露,sso系统可以按照与一定的加密算法对传递的参数进行加密。

然而,在实际应用中,如果加密算法泄露,也仍然会存在一定的安全性风险。有鉴于此,在本申请中,可以采用一种通过临时token来换取共享token的机制。

请继续参见图3,在示出的一种实施方式中,当用户通过sso系统的登录认证后,sso系统除了可以为该用户生成上述共享token以外,还可以生成一个与共享token对应的临时token,然后将该临时token通过重定向的方式,返回给子系统。

其中,由于临时token通过重定向的方式传递,是不安全的,因此可以为临时token配置一个小于共享token的有效期;例如,共享token的有效期通常为半小时至一小时不等,那么对于临时token而言,可以设置一个远小于共享token的有效期;比如,可以设置的足够短,使得临时token将呈现为一种使用一次就立即失效的效果。

当然,在实际应用中,如果sso系统从本地域下的cookie中读取到了上述共享token,此时可以直接生成与上述共享token对应的临时token,然后通过以上示出的重定向的方式,将该临时token返回给子系统。

请继续参见图3,当子系统收到sso系统通过重定向的方式返回的临时token时,此时可以通过调用sso系统基于rpc框架向各个子系统独立开发的登录认证接口(api接口),将上述临时token作为参数提交给sso系统,由sso系统对该临时token进行认证;如果通过认证,sso系统可以将与该临时token对应的上述共享token,以及与上述共享token绑定的用户session(比如sessionid)作为调用响应返回给该子系统。

其中,在本申请中,sso系统对token进行认证的过程,在本申请中不再进行详述,本领域技术人员在将本申请的技术方案付诸实现时,可以参考相关技术中的记载。

当然,在实际应用中,在一些对安全性要求不高的场景下,sso系统也可以直接将上述共享token通过以上示出的重定向的方式,返回给子系统。在这种情况下,子系统可以通过调用上述登录认证接口,将该共享token提交给上述sso系统,由上述sso系统进行认证,并在认证通过后,将与上述共享token绑定的用户session作为调用响应返回给该子系统。

其中,需要说明的是,sso系统返回给子系统的用户session通常可以是sessionid,当子系统在收到sso系统的调用响应后,可以检查调用响应中携带的上述用户sessionid是否为空值(null);如果为空值,此时子系统可以基于sso系统的url地址,重新通过url重新定向的方式向sso发送用户登录请求,具体过程不再赘述;如果不为空值,此时用户登录子系统成功,子系统可以将上述sessionid,以及上述共享token写入本地域下的cookie中。

后续,用户在访问该子系统中的要求用户登录后才能访问的资源时,可以从本地域下的cookie中读取上述sessionid,然后将该sessionid携带在访问请求中,提交给子系统的服务端。而子系统的服务端可以读取该访问请求中的sessionid,基于该sessionid来查找是否存在与该sessionid对应的用户session,进而来验证该用户是否处于登录状态;如果存在,表明用户当前处于已登录状态,可以直接返回响应的资源即可。

例如,在实现时,sso系统的服务端具体可以与子系统的服务端共享用户session。即用户通过sso系统的登录认证后,除了可以将为用户生成的用户session在sso系统的分布式缓存中进行存储维护以外,还可以同步到子系统的服务端进行存储维护。而子系统的服务端在收到上述访问请求后,可以基于该访问请求中的sessionid,在本地查找是否存在与该sessionid对应的用户session,以确定是否向用户返回所请求的资源。或者,在另一种实现方式中,用户session也可以仅在sso系统的服务端上进行维护,子系统的服务端在收到上述访问请求后,可以将该访问请求中的sessionid,进一步透传给sso系统的服务端,由sso系统的服务端在其本地查找是否存在与该sessionid对应的用户session,来验证该用户是否处于登录状态,然后向子系统的服务端返回验证结果,以确定是否向用户返回所请求的资源。

请继续参见图3,当用户在子系统发起登录时(比如,用户访问了子系统中要求用户登录后才能访问的资源),子系统可以解析本地域下的cookie,从本地域下的cookie中读取上述共享token,来确认用户是否已经通过在sso系统的登录认证在sso系统成功登录。

请参见图3,子系统在响应用户针对子系统的登录请求,解析本地域下的cookie,从本地域下的cookie中读取上述共享token的过程中,如果子系统从本地域下的cookie中读取到上述共享token,表明用户已经通过了sso系统的登录认证,此时可以通过调用sso系统基于rpc框架向各个子系统独立开发的登录认证接口(api接口),将上述共享token作为参数提交给sso系统,由sso系统对该共享token进行认证,并在认证通过后,由sso系统将与该共享token绑定的用户session(比如sessionid)作为调用响应返回给该子系统。

其中,sso系统返回给子系统的用户session仍然可以是sessionid,当子系统在收到sso系统的调用响应后,可以检查调用响应中上述用户sessionid是否为空值(null),如果为空值,此时子系统可以基于sso系统的url地址,重新通过url重新定向的方式向sso发送用户登录请求,不在赘述;如果不为空值,此时用户登录子系统成功,子系统可以将上述sessionid写入本地域下的cookie中。

后续,用户在访问该子系统中的要求用户登录后才能访问的资源时,可以从本地域下的cookie中读取上述sessionid,然后将该sessionid携带在访问请求中,提交给子系统的服务端。而子系统的服务端可以读取该访问请求中的sessionid,基于该sessionid来查找是否存在与该sessionid对应的用户session,进而来验证该用户是否处于登录状态;如果存在,表明用户当前处于已登录状态,可以直接返回响应的资源即可,不再赘述。

通过以上实施例可知,一方面,通过将传统的url重定向机制和cookie机制相结合,使得用户在登录子系统时,可以重定向到sso系统完成登录,并在用户在成功登录sso系统后,可以通过重定向的方式,将sso系统为用户生成的共享token跨域写入子系统所在的本地域下的cookie,从而克服了基于cookie无法实现跨域登录的问题;

另一方面,通过在基于rpc架构的sso系统中面向各接入的子系统提供登录认证接口,使得子系统可以通过远程调用该登录认证接口的方式,将本地域下的cookie中写入的共享token跨域提交给sso系统进行登录认证,从而可以实现跨域的单点登录。

与上述方法实施例相对应,本说明书还提供了一种单点登录的装置的实施例。本说明书的单点登录的装置的实施例可以应用在承载分布式rpc架构的sso系统的电子设备(比如服务器)上。其中,上述sso系统接入了若干子系统,所述若干子系统和所述sso系统分别对应不同的登录域名

装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图4所示,为本说明书的单点登录的装置所在的电子设备的一种硬件结构图,除了图4所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的电子设备通常根据该服务器的实际功能,还可以包括其他硬件,对此不再赘述。

图5是本说明书一示例性实施例示出的一种单点登录的装置的框图。

请参考图5,所述单点登录的装置50可以应用在前述图4所示的电子设备中,包括:

第一接收模块501,接收到任一目标子系统通过url重定向的方式发送的用户登录请求;其中,所述用户登录请求由所述目标子系统在其本地域下的cookie中未读取到共享token时发送;所述用户登录请求携带所述目标子系统的url地址;

第一读取模块502,响应于所述用户登录请求,从本地域下的cookie中读取所述共享token;其中,所述共享token在所述用户通过所述单点登录系统的登录认证时写入本地域下的cookie;

返回模块503,如果从本地域下的cookie中读取到所述共享token,基于所述目标子系统的url地址通过url重定向的方式将所述共享token返回给所述目标子系统,以由所述目标子系统调用所述单点登录系统的登录认证接口,将所述所述共享token提交至所述单点登录系统发起跨域单点登录认证。

在本实施例中,所述返回模块503进一步:

如果所述第一读取模块502从本地域下的cookie中未读取到所述共享token,向所述目标子系统返回所述单点登录系统的登录页面;

所述装置50还包括:

认证模块504(图5中未示出),获取用户在所述登录页面输入的登录认证信息;对获取到的登录认证信息进行认证;如果认证通过,生成用于记录登录状态的用户session以及所述共享token,并将生成的所述用户session与所述共享token绑定后写入本地域下的cookie;

所述返回模块503进一步:

基于所述目标子系统的url地址通过url重定向的方式将所述共享token返回给所述目标子系统,以由所述目标子系统调用所述单点登录系统的登录认证接口,将所述共享token提交至所述单点登录系统发起跨域单点登录认证。

在本实施例中,所述认证模块504进一步:

在接收到所述目标子系统通过调用所述单点登录系统的登录认证接口提交的所述共享token时,对所述共享token进行认证;

如果所述共享token认证通过,将与所述共享token绑定的所述用户session返回给所述目标子系统,以由所述目标子系统将所述用户session和所述共享token写入其本地域下的cookie完成跨域单点登录。

在本实施例中,所述单点登录系统配置了redis分布式缓存;

所述认证模块504进一步:

在所述redis分布式缓存中创建cookie;

将生成的所述用户session与所述共享token绑定后写入所述cookie。

在本实施例中,所述返回模块进一步503:

生成与所述共享token对应的临时token;

基于所述目标子系统的url地址通过url重定向的方式将所述共享token返回给所述目标子系统;

所述认证模块504进一步:

在接收到所述目标子系统通过调用所述单点登录系统的登录认证接口提交的所述临时token时,对所述临时token进行认证,并在认证通过时将所述共享token以及所述用户session返回给所述目标子系统。

在本实施例中,所述临时token以及所述共享临时token分别被预配置了有效时长;其中,所述临时token的有效时长小于所述共享token。

在本实施例中,所述单点登录系统的系统架构中包括面向web子系统提供接入服务的servletfilter接口;以及,面向app子系统提供接入服务的api接口;接入所述单点登录系统的子系统包括web子系统和基于app的子系统。

在本实施例中,所述单点登录系统为基于dubbo架构的分布式系统。

与上述方法实施例相对应,本说明书还提供了一种单点登录的装置的实施例。本说明书的单点登录的装置的实施例可以应用在承载子系统的电子设备(比如服务器)上。其中,上述子系统接入了基于分布式rpc框架的sso系统;所述子系统和所述sso系统分别对应不同的登录域名.

装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图6所示,为本说明书的单点登录的装置所在的电子设备的一种硬件结构图,除了图6所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的电子设备通常根据该服务器的实际功能,还可以包括其他硬件,对此不再赘述。

图7是本说明书一示例性实施例示出的一种单点登录的装置的框图。

请参考图7,所述单点登录的装置70仍然可以应用在前述图6所示的电子设备中,包括:

第二读取模块701,响应于用户针对所述子系统的登录请求,在本地域下的cookie中查找共享token;其中,所述共享token在所述用户通过所述单点登录系统的登录认证时写入本地域下的cookie;

发送模块702,如果在本地域下的cookie中未读取到所述共享token,基于单点登录系统的url地址通过url重定向的方式向所述单点登录系统发送用户登录请求;其中,所述用户登录请求携带所述目标子系统的url地址;

第二接收模块703,如果所述单点登录系统在其本地域下的cookie中读取到所述共享token,接收所述单点登录系统基于所述目标子系统的url地址通过url重定向的方式返回的所述共享token;

提交模块704,调用所述单点登录系统的登录认证接口,将所述所述共享token提交至所述单点登录系统发起跨域单点登录认证。

在本实施例中,所述第二接收模块703进一步:

如果所述单点登录系统在其本地域下的cookie中未读取到所述共享token,接收所述单点登录系统返回的登录页面,并将用户在所述登录页面输入的登录认证信息提交至所述单点登录系统,以由所述单点登录系统对所述登录认证信息进行认证,并在认证通过后生成用户session以及所述共享token;

接收所述单点登录系统基于所述目标子系统的url地址通过url重定向的方式返回的共享token;

所述提交模块704进一步:

调用所述单点登录系统的登录认证接口,将所述所述共享token提交至所述单点登录系统发起跨域单点登录认证。

在本实施例中,所述第二接收模块703进一步:

接收所述单点登录系统基于所述目标子系统的url地址通过url重定向的方式返回的临时token;其中,所述临时token为所述单点登录系统生成的与所述共享token对应的临时token;

所述提交模块704进一步:

调用所述单点登录系统的登录认证接口将所述临时token提交至所述单点登录系统发起跨域单点登录认证;

所述第二接收模块703进一步:

接收所述单点登录系统在所述临时token认证通过时,返回的所述共享token以及与用户session,并将所述用户session和所述共享token写入本地域下的cookie完成跨域单点登录。

在本实施例中,所述临时token以及所述共享临时token分别被预配置了有效时长;其中,所述临时token的有效时长小于所述共享token。

在本实施例中,所述单点登录系统的系统架构中包括面向web子系统提供接入服务的servletfilter接口;以及,面向app子系统提供接入服务的api接口;所述子系统包括web子系统和基于app的子系统。

上述装置中各个模块模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1