用户访问app系统,app系统是需要登录的,但用户现在没有登录。
跳转到CAS server,即SSO登录系统,以后图中的CAS Server我们统一叫做SSO系统。 SSO系统也没有登录,d出用户登录页。
用户填写用户名、密码,SSO系统进行认证后,将登录状态写入SSO的session,浏览器(Browser)中写入SSO域下的Cookie。
SSO系统登录完成后会生成一个ST(Service Ticket),然后跳转到app系统,同时将ST作为参数传递给app系统。
app系统拿到ST后,从后台向SSO发送请求,验证ST是否有效。
验证通过后,app系统将登录状态写入session并设置app域下的Cookie。
至此,跨域单点登录就完成了。以后我们再访问app系统时,app就是登录的。接下来,我们再看看访问app2系统时的流程。
用户访问app2系统,app2系统没有登录,跳转到SSO。
由于SSO已经登录了,不需要重新登录认证。
SSO生成ST,浏览器跳转到app2系统,并将ST作为参数传递给app2。
app2拿到ST,后台访问SSO,验证ST是否有效。
验证成功后,app2将登录状态写入session,并在app2域下写入Cookie。
这样,app2系统不需要走登录流程,就已经是登录了。SSO,app和app2在不同的域,它们之间的session不共享也是没问题的
cookie域为SSO的,验证通过后SSO给业务办法ticket,凭借ticket再访问app系统,验证成功后存入cookie,此时域为app。
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。企业应用集成(EAI)。企业应用集成可以在不同层面上进行:例如在数据存储层面上的“数据大集中”,在传输层面上的“通用数据交换平台”,在应用层面上的“业务流程整合”,和用户界面上的“通用企业门户”等等。事实上,还用一个层面上的集成变得越来越重要,那就是“身份认证”的整合,也就是“单点登录”。单点登录的技术实现机制:当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录;根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,应该返回给用户一个认证的凭据--ticket;用户再访问别的应用的时候,就会将这个ticket带上,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到认证系统进行效验,检查ticket的合法性。如果通过效验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。可以看出,要实现SSO,需要以下主要的功能:所有应用系统共享一个身份认证系统;所有应用系统能够识别和提取ticket信息;应用系统能够识别已经登录过的用户,能自动判断当前用户是否登录过,从而完成单点登录的功能。其中统一的身份认证系统最重要,认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。另外,认证系统还应该对ticket进行效验,判断其有效性。整个系统可以存在两个以上的认证服务器,这些服务器甚至可以是不同的产品。认证服务器之间要通过标准的通讯协议,互相交换认证信息,就能完成更高级别的单点登录。
①前端vue项目判断如果有token,则说明用户已登录,可以访问客户端A的服务。否则未登陆,未登陆有两种状态:在单点登录服务端已经登录和未在单点登录服务端登陆
判断如果有ticket,则说明已在单点登录服务端登录。调用/cas/client/validateLogin接口验证该ticket是否有效。转②
判断如果无ticket,则说明未在单点登录服务端登录。则定向到单点登录服务端。转③
②/cas/client/validateLogin接口方法,发起>
心血来潮,探讨一下cookie和session机制,以及单点登录的原理。不到之处欢迎指正。
要谈单点登录,还要从cookie机制说起。这块知识也是面试中的高频题,小马以前如有辅助也会喜欢聊。只是大部分同学不是概念模糊就是完全抛弃了这块知识点,经常被秒。
cookie机制是一种会话机制,源于>
单点登录SSO(Single Sign ON),指在多个应用系统中,只需登录一次,即可在多个应用系统之间共享登录。如:在学校登录了OA系统,再打开科研、教务系统,都会实现自动登录。
统一身份认证CAS(Central Authentication Service)是SSO的开源实现,利用CAS实现SSO可以很大程度的降低开发和维护的成本。PS:CAS是由耶鲁大学发起的企业级开源项目,历经20多年的完善,具有较高的稳定性、安全性。国内多数高校的SSO都基于CAS。
CAS由CAS Server和CAS Client两部分组成。
CAS三个重要术语:TGT(Ticket Granting Ticket)、TGC(Ticket Granting Cookie)和ST(Service Ticket)。
CAS单点登录的完成流程如下:
CAS Client获取用户信息后,可以使用session的形式管理用户会话。后续的交互请求无需再重定向到CAS Server,CAS Client直接返回用户请求的资源即可。
单点登录是指在多个业务应用系统中,用户只需要登陆一次,就可以访问所有有权限的业务应用系统。在企业内部使用单点登录还是挺常见的,记录一下单点登录是什么主要是发现Oracle EBS也能单点登录,抽空特意了解了一下Oracle EBS单点登录的机制。
官方文档见 UG
EBS的单点登录是需要依靠Oracle Access Manage和Oracle Directory Services,启用SSO之后,EBS会将登录的功能委派给Oracle Access Manger。
从实现原理的角度看,EBS的单点登录主要是依靠cookie实现。EBS会要求需要使用相同的域名来实现单点登录
打开EBS的网址后,如果EBS没有登录的话(判断EBS的cookie是否还存在且有效)就会重定向到OAM的网址去做登录
如果OAM已经登录了(判断OAM的cookie是否存在且有效),就会重定向回EBS(返回到ebs的url中会包含用户信息,EBS会根据OAM的登录结果产生EBS的cookie),这时EBS就会自动登录
如果OAM还没有登录,用户会在OAM的网站登录,成功登录后(OAM会创建一个cookie),之后会重新回到EBS的界面,这时EBS就会自动登录了。
基本工作逻辑见下图
PS: Oracle Directory Services主要是用来存储用户名和密码信息以及映射到EBS的用户名
以上是基于标准模块的功能原理配置,如果要使用其他第三方SSO登录的软件的话,原理和上面的类似,都需要启用Oracle Access Manage和Oracle Directory Services。 只是OAM可以把登录的权限在委派给第三方的SSO软件
单点登出:也就是用户在EBS上面注销后应该一并注销单点登录认证,这需要在Access Gate做一些特殊处理清理一些cookies
EBS实施单点登录时的一些特殊考量点:
CAS是一个单点登录的协议,详细逻辑见 官网 。
从实现的角度感觉也还是用了session的功能。当第一次登陆SSO系统的时候,就会生成一个ticket,然后存放到了服务器,同时会分配给ticket给应用系统。之后应用系统访问SSO系统的时候就会带上ticket,SSO系统验证ticket来判断用户时候有效。
CAS协议是专门为CAS开发的一种简单而强大的基于票据的协议。
CAS涉及到一个或多个客户端与一个服务端,客户端嵌入CASified应用程序(称为“CAS服务”),而CAS服务器是一个独立组件:
1CAS服务器负责对用户进行身份验证并授予对应用程序的访问权
2CAS客户端保护CAS应用程序,并从CAS服务器检索被授予用户的标识。
关键概念:
1存储在CASTGC cookie中的 TGT (票据授予票据)表示用户的一个SSO session。
2 ST (服务票证)作为url中的GET参数传输,表示由CAS服务器为特定用户授予认证应用程序的访问权限。
WEB流程:
1用户访问目标应用程序,通过浏览器发送GET请求到目标应用
2目标应用检测到用户未认证,则转发请求到CAS服务端,带上查询参数service,值为目标应用地址。
3CAS服务端检测用户发现没有SSO session 则返回CAS登录页面。
4用户在CAS登录页面填写登录表单,提交进行认证。
5认证成功后CAS服务端创建SSO session,并创建TGT票据到Cookie中 (Set-Cookie:CASTGC=TGT-xxxxxx),并重定向到目标应用程序带上查询参数ticket=ST-xxxxx。
6目标应用发送请求向CAS服务器验证ST票据,验证成功后目标应用创建用户访问session,并把sessionID放入cookie中。
7用户访问目标应用通过sessionID获取到session,登陆成功。
8用户访问其他CAS客户端应用,其他CAS客户端重定向请求到CAS服务器,同步骤2。
9CAS服务器检测到用户TGT这个cookie,获取到SSO session,直接认证成功,并重定向到目标应用程序带上查询参数ticket=ST-xxxxx。
10同步骤6,7,成功登陆其他CAS客户端应用。
以上就是关于SSO单点登陆流程全部的内容,包括:SSO单点登陆流程、求解!单点登录怎么实现的、CAS搭建单点登录Web端等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)