前言:SSO是Single Sign On(单点登录)的缩写,OAuth是Open Authority(开放授权),这两者都是使用令牌的方式来代替用户密码访问应用。流程上来说他们非常相似,但概念上又十分不同。很多人会将其混为一谈,其实这两个还是有些区别的。
一、单点登录简介
1、单点登录概念
单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
简单的说就是在多个应用的系统中,用户只需要登录一次就可以访问权限范围内的所有应用子系统,同样的注销也只需要注销一次。
比如百度这个网站,用户只要登录了百度的官网,那么对于百度百科、百度知道、百度贴吧等网站都是处于登录状态,这就是一个典型的单点登录的例子。
2、单点登录实现原理
1.用户首次访问某个系统X时,需要进行登录。
2.系统A携带着用户登录时的信息重新定向给认证系统。
3.认证系统会验证用户登录信息。
4. 验证通过后,返回一个token。token类似一种内部的通行证,包含了用户身份信息、登录状态和过期时间,在各个系统间共享。
5.认证系统带着token重定向给系统A,得知用户是已登录状态。
6.系统A向用户返回请求的资源。
7.用户访问系统B时,需要进行登录。
8.系统B通过共享的token,得知用户是已登录状态。
9.系统B向用户返回请求的资源。
注意事项:
-
Token是有时效性的,如果用户长时间没有操作,token将会过期。Token过期后用户再次访问系统A、系统B时,登录状态已失效,需要重新登录。
-
关于注销场景,与上述流程类似。用户主动从系统A注销时,系统A调用认证系统,清除token。此时用户再访问系统A、系统B时,通过共享的token得知用户是已注销状态,需要重新登录。
二、单点登录和Oauth2.0的区别
虽然Oauth2.0能够实现单点登录,但是在一些方面还是有些区别的,如下:
-
信任角度:Oauth2.0授权服务端和第三方客户端不属于一个互相信任的应用群,比如微信和第三方,这就不是一个公司的产品;然而单点登录的服务端和接入的客户端都在同一个相互信任的应用系统中,比如百度官网、百度百科,这都是一个公司的产品
-
资源角度:OAuth2.0授权主要是让用户自行决定——“我”在OAuth2.0服务提供方的个人资源是否允许第三方应用访问;而单点登录的资源都在客户端这边,单点登录的服务端主要用于登录,以及管理用户在各个子系统的权限信息。
-
流程角度:OAuth2.0授权的时候,第三方客户端需要拿预先“商量”好的密码去获取Access Token;而单点登录则不需要。
Oauth2.0完全可以实现单点登录,但是更加侧重于对于己方资源的保护,了解了这两种的区别才能正确的选择
三、总结(SSO与OAuth区别与联系)
SSO和OAuth这两者有个共同的特点,都是使用令牌的方式来代替用户密码访问应用。在SSO和OAuth中,你在业务系统中都没有账号和密码,账号密码是存放在登录中心或微信服务器中,这就是所谓的使用令牌代替账号密码访问应用。Oauth2.0和单点登录的区别需要理解清楚,相对来说Oauth2.0实现单点登录更加简单,CAS虽然能够实现单点登录,但是服务部署和配置更加复杂,不易于上手,当然目前也有很多的系统在使用CAS,在选择的时候开发者根据这些区别和复杂程度去决策。
SSO主要的作用是提升用户在多系统中登录时的操作体验,通过将登录认证和业务系统分离,使用独立的登录中心,实现一次登录后,所有相关的业务系统都能免登录访问资源。OAuth是一种开放授权协议,可以允许第三方应用在不使用账号和密码的情况下访问特定资源,例如你访问某网站想留言又不想注册账号,然后使用了微信授权,使用微信的个人信息进行留言,这就是OAuth应用的一个经典场景。
SSO是一种思想,或者说是一种解决方案,是抽象的,我们要做的就是按照它的这种思想去实现它,而OAuth2是用来允许用户授权第三方应用访问他在另一个服务器上的资源的一种协议,它不是用来做单点登录的,但我们可以利用它来实现单点登录。
参考链接:
SSO单点登录和OAuth认证
阿里终面:说说OAuth2.0 与 单点登录的区别?