SSO是SingleSignOn的缩写,OAuth是OpenAuthority的缩写,两者都是使用令牌代替用户密码来访问应用程序。在过程方面它们非常相似,但在概念上却非常不同。很多人把它们混为一谈,其实两者是有很大区别的。对于OAuth2.0相关的内容,在SpringCloudAlibaba的实战中结合实际项目源码从头搭建中有详细的介绍,如下图:什么是单点登录?您可以访问权限范围内的所有应用子系统,同一次注销只需注销一次。例如,在百度网站上,只要用户登录百度官网,就会登录百度百科、百度知乎、百度贴吧等网站。这是单点登录的典型例子。单点登录和Oauth2.0的区别Oauth2.0虽然可以实现单点登录,但是在某些方面还是有区别的,如下:信任角度:Oauth2.0授权服务器和第三方客户端不属于对相互信任的应用群,比如微信和第三方,不是一个公司的产品;但是,单点登录服务器和连接的客户端是在同一个相互信任的应用系统中,比如百度官网和百度百科。是公司的产品资源视角:OAuth2.0授权主要是让用户自己决定——OAuth2.0服务商中的“我的”个人资源是否允许第三方应用访问;而单点登录资源都在客户端这里,单点登录服务器主要用于各个子系统中用户权限信息的登录和管理。流程视角:OAuth2.0授权时,第三方客户端需要使用预先协商好的密码获取AccessToken;单点登录没有。Oauth2.0可以完全实现单点登录,但更侧重于对自身资源的保护。只有了解了两者的区别,才能选择正确的单点登录实现方式,系统的各个子系统访问Oauth2.0的认证服务。用户从认证服务获取token后,可以直接通过网关转发给下游子系统。只需要一次登录。其实除了Oauth2.0,还有很多框架可以实现单点登录,最经典的就是CAS框架。下面是CAS框架的官方流程图。特别注意:SSO是一个思想,CAS只是一个实现这个思想的框架。上述过程大致如下:用户输入URL进入业务系统ProtectedApp,系统发现用户未登录,将用户重定向到单点登录SystemCASServer,并带上自己的地址服务参数。用户的浏览器被重定向到单点登录系统,系统检查用户是否登录。这是SSO(这里是CAS)系统的第一个界面。如果用户没有登录,界面会将用户重定向到登录界面。如果已登录,则设置全局会话并重定向到业务系统。用户填写密码并提交登录。注意此时的登录界面是由SSO系统提供的。只有SSO系统会保存用户的密码。SSO系统验证密码是否正确。如果正确,则重定向到业务系统,并带来SSO系统的发行。门票。浏览器重定向到业务系统的登录界面。此登录界面不需要密码,但带有SSO票证。业务系统使用ticket请求SSO系统获取用户信息。并设置一个本地session,表示登录成功并返回给浏览器sessionId(在tomcat中称为JSESSIONID)。之后所有交互都可以使用sessionId与业务系统进行交互。整个过程比较复杂。当然,CAS框架的配置也比较复杂。了解它的人想放弃。如何搭建CAS,后面会单独介绍。最常见的例子就是当我们打开淘宝APP时,首页会有天猫、聚划算等服务的链接。点进去就直接跳过,不会要求你重新登录。总结一下Oauth2.0和单点登录的区别需要理解清楚。相对而言,Oauth2.0更容易实现单点登录。CAS虽然可以实现单点登录,但是服务部署和配置比较复杂,不易上手。当然,目前有很多系统使用了CAS,开发者在选择时会根据这些差异和复杂度来做决定。