SSO单点登录与OAuth2.0 区别

前言: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能够实现单点登录,但是在一些方面还是有些区别的,如下:

  1. 信任角度:Oauth2.0授权服务端和第三方客户端不属于一个互相信任的应用群,比如微信和第三方,这就不是一个公司的产品;然而单点登录的服务端和接入的客户端都在同一个相互信任的应用系统中,比如百度官网、百度百科,这都是一个公司的产品

  2. 资源角度:OAuth2.0授权主要是让用户自行决定——“我”在OAuth2.0服务提供方的个人资源是否允许第三方应用访问;而单点登录的资源都在客户端这边,单点登录的服务端主要用于登录,以及管理用户在各个子系统的权限信息。

  3. 流程角度:OAuth2.0授权的时候,第三方客户端需要拿预先“商量”好的密码去获取Access Token;而单点登录则不需要。

Oauth2.0完全可以实现单点登录,但是更加侧重于对于己方资源的保护,了解了这两种的区别才能正确的选择


三、总结(SSOOAuth区别与联系)

SSO和OAuth这两者有个共同的特点,都是使用令牌的方式来代替用户密码访问应用。在SSO和OAuth中,你在业务系统中都没有账号和密码,账号密码是存放在登录中心或微信服务器中,这就是所谓的使用令牌代替账号密码访问应用。Oauth2.0和单点登录的区别需要理解清楚,相对来说Oauth2.0实现单点登录更加简单,CAS虽然能够实现单点登录,但是服务部署和配置更加复杂,不易于上手,当然目前也有很多的系统在使用CAS,在选择的时候开发者根据这些区别和复杂程度去决策。

      SSO主要的作用是提升用户在多系统中登录时的操作体验,通过将登录认证和业务系统分离,使用独立的登录中心,实现一次登录后,所有相关的业务系统都能免登录访问资源。OAuth是一种开放授权协议,可以允许第三方应用在不使用账号和密码的情况下访问特定资源,例如你访问某网站想留言又不想注册账号,然后使用了微信授权,使用微信的个人信息进行留言,这就是OAuth应用的一个经典场景。

       SSO是一种思想,或者说是一种解决方案,是抽象的,我们要做的就是按照它的这种思想去实现它,而OAuth2是用来允许用户授权第三方应用访问他在另一个服务器上的资源的一种协议,它不是用来做单点登录的,但我们可以利用它来实现单点登录。


参考链接:

SSO单点登录和OAuth认证

阿里终面:说说OAuth2.0 与 单点登录的区别?

好的,我会为您解答。在上一篇博客中,我们已经介绍了OAuth2.0的登录流程以及单点登录的实现方式。接下来,我将为您介绍OAuth2.0的登出流程。 在OAuth2.0的登出流程中,登录流程类似,也需要涉及到三个角色:用户、客户端认证服务器。下面是OAuth2.0的登出流程: 1. 用户在客户端应用程序中发起登出请求,客户端应用程序将请求转发给认证服务器。 2. 认证服务器接收到登出请求后,会将用户的会话标识从认证服务器的存储中删除,并向客户端应用程序发回响应,告诉客户端应用程序用户已经登出。 3. 客户端应用程序接收到响应后,会清除本地存储的用户会话信息,并将用户重定向到认证服务器的登出页面。 4.用户在认证服务器登出页面上点击确认登出后,认证服务器会将用户重定向到客户端应用程序的登出回调URL,并在URL中包含一个参数,表示用户已经登出。 5. 客户端应用程序接收到认证服务器的登出回调请求后,会清除本地存储的用户会话信息,并重定向用户到应用程序的登录页面。 需要注意的是,OAuth2.0的登出流程中并没有提供单点登出的实现方式,因为OAuth2.0本身并不支持单点登出。如果需要实现单点登出,可以借助于其他的技术手段,比如使用Redis等缓存技术来实现单点登出。 好的,以上就是OAuth2.0的登出流程。希望对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java架构何哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值