一、什么是单点登录?

单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。---- 《百度百科》

换而言之,在公司业务逐渐壮大的过程中,开发了很多的子系统。每个子系统都有自己的用户的登录、注册模块,为了能够在公司内部统一用户登录授权功能,诞生了一个统一的用户登录认证系统,这个系统就可以称之为单点登录系统。

二、什么是 OAuth2.0 协议?

OAuth 是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。主要是用于在第三方平台上进行的用户授权,常见的一些场景,例如:QQ、微博、微信的授权登录。第三方开发平台的授权接入,例如:Shopify、速卖通、亚马逊等。

三、单点登录解决什么问题?

假设,当我们的 ERP 系统功能模块越来越多的时候,后期可能会拆分出产品库存系统、财务系统、订单系统、工单系统等,那是不是意味着每个系统都需要开发一套登录注册功能呢?如果每个系统有一套自己的用户体系,就会出现用户在使用的时候,需要重复注册、重复登录、重复记住对应的账号密码,一旦子系统多达十几个的时候,对于用户来说这种情况,显然是不能接受的。

其次对应我们开发人员来说,很显然也不可能每个系统开发一套相同的功能,因此我们需要有一套能够统一登录、注册、用户管理、权限等功能的系统。那么这样一套系统就是,今天要分享的单点登录系统。单点登录系统,能够让我们只需拥有一个账号,便可以访问任意的子系统,类似于我们拥有了一张通行证,行便天下,畅通无阻。

四、单点登录交互时序图

五、案例演示

1、授权界面

2、系统地址

SSO 系统:http://www.sso.com/

A 业务系统:http://www.a.com

B 业务系统:http://www.b.com

3、关键代码

六、Ouath 2.0 授权模式的参数说明

1、客户端传递的参数

参数 描述
response_type 表示授权类型,必选项,此处的值固定为"code"
client_id 表示客户端的ID,必选项
redirect_uri 表示重定向URL,可选项
scope 表示申请的权限范围,可选项
state 表示客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值。

2、授权系统回调给客户端的参数

参数 描述
code 表示授权码,必选项。
state 如果客户端的请求中包含这个参数,认证服务器的回应也必须一模一样包含这个参数。

3、客户端向授权系统申请 Token 所需参数

参数 描述
grant_type 表示使用的授权模式,必选项,此处的值固定为"authorization_code"。
code 表示获得的授权码,必选项。
redirect_uri 表示重定向URI,必选项,且必须与上面中的该参数值保持一致。
client_id 表示客户端ID,必选项。
client_secret 表示客户端密钥,必选项。

4、授权系统返回给客户端的参数

参数 描述
access_token 表示访问令牌,必选项。
token_type 表示令牌类型,该值大小写不敏感,必选项,可以是bearer类型或mac类型。
expires_in 表示过期时间,单位为秒。如果省略该参数,必须其他方式设置过期时间。
refresh_token 表示更新令牌,用来获取下一次的访问令牌,可选项。
scope 表示权限范围,如果与客户端申请的范围一致,此项可省略。

七、总结

单点登录系统旨在打通各个子系统的用户体系,实现多场景下的免登。同时,企业内部也统一了账号体系,实现了用户数据的聚合。减少了用户的反复登录,提升了产品的体验。从系统的层面,减少了系统的重复建设,降低了研发成本。从安全层面,统一管理用户账号,提升了用户账号及权限的安全性。

本次分享的主要目的,旨在让大家了解单点登录的思想,以及 Ouath2.0 协议在实际场景中的应用。单点登录只是一种解决问题的手段或技术解决方案,Oauth2.0 协议是一套授权的标准。那么单点登录系统,就是这两者的结合。附代码 https://github.com/yxhsea/single-point.git

基于 OAuth2.0 协议的单点登录系统方案设计的更多相关文章

  1. oauth2.0实现sso单点登录的方式和相关代码

    SSO介绍 什么是SSO 百科:SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他 ...

  2. QQ联合登录(基于Oauth2.0协议)

    1. 获取授权码Authorization Code https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id= ...

  3. API开放平台接口设计-------基于OAuth2.0协议方式

    1,简介OAuth http://www.ruanyifeng.com/blog/2019/04/oauth_design.html OAuth 是什么? http://www.ruanyifeng. ...

  4. 对OAuth2.0协议的理解和测试demo

    1. 什么是OAuth OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容. OAuth ...

  5. 单点登录系统(SSO)的开发思路

    单点登录并不是一个新鲜的玩意儿,比较官方的解释是企业业务整合的解决方案之一,通俗来讲SSO就是一个通用的用户中心,国内比较流行的UCenter就是一套单点登录解决方案.而近期以CSDN明文存储用户密码 ...

  6. 多平台的网站实现单点登录系统(SSO)的开发思路 让你的会员中心更加统一(参考资料)

    单点登录并不是一个新鲜的玩意儿,比较官方的解释是企业业务整合的解决方案之一,通俗来讲SSO就是一个通用的用户中心,国内比较流行的UCenter就是一套单点登录解决方案.而近期以CSDN明文存储用户密码 ...

  7. IdentityServer4之SSO(基于OAuth2.0、OIDC)单点登录、登出

    IdentityServer4之SSO(基于OAuth2.0.OIDC)单点登录.登出 准备  五个Web站点: 1.localhost:5000 :                  认证服务器.2 ...

  8. 单点登录系统实现基于SpringBoot

    今天的干货有点湿,里面夹杂着我的泪水.可能也只有代码才能让我暂时的平静.通过本章内容你将学到单点登录系统和传统登录系统的区别,单点登录系统设计思路,Spring4 Java配置方式整合HttpClie ...

  9. 使用OAuth2.0协议的github、QQ、weibo第三方登录接入总结

    目录 第三方接入总结 OAuth2.0介绍 github OAuth2.0登录接入 国内第三方应用商SDK使用 微博SDK 腾讯QQ SDK passport.js插件使用 安装 相关中间件.路由 返 ...

  10. 第三方登录,一般都是遵循OAuth2.0协议。

    1. QQ登录OAuth2.0协议开发流程 1.1 开发流程 申请接入,获取appid和appkey; 开发应用,设置协作者账号,上线之前只有协作者才能进行第三方登录 放置QQ登录按钮(这个自己可以用 ...

随机推荐

  1. Python制作词云--stylecloud简单使用

    安装 pip install stylecloud 使用 from stylecloud import gen_stylecloud gen_stylecloud('zhangsan lisi wan ...

  2. ArkUI新能力,助力应用开发更便捷

    原文链接:https://mp.weixin.qq.com/s/TAuq1WC6435ebn6L61rZAA,点击链接查看更多技术内容:    ArkUI是一套构建分布式应用的声明式UI开发框架.它具 ...

  3. Linux之隔离技术

    前言 Linux的内核有两大特性Namespace和CGroup,这两种特性可以在Linux主机上实现主机名.用户.网络等全局资源的隔离,也是实现网络虚拟化.容器技术的基础. 命名空间 Linux N ...

  4. VMware Workstation之虚拟机NAT模式

    [摘要] 三台虚拟机配置成NAT模式,实现三台虚拟机互通并可以访问互联网. 一.虚拟机配置为NAT,实现访问互联网和宿主机 1.虚拟网络编辑器配置 VMnat8为NAT的虚拟网卡,NAT模式可以基于D ...

  5. Matplotlib Installing an official release from resources 源码安装Matplotlib官方版本

    Installation Installing an official release Matplotlib releases are available as wheel packages for ...

  6. ECharts海量数据渲染解决卡顿的4种方式

    场景 周五进行需求评审的时候: 出现了一个图表,本身一个图表本没有什么稀奇的: 可是产品经理在图表的上的备注,让我觉得这个事情并不简单: 那个图表的时间跨度可以是月,年,而且时间间隔很短: 这让我意识 ...

  7. HarmonyOS NEXT应用开发—在Native侧实现进度通知功能

    介绍 本示例通过模拟下载场景介绍如何将Native的进度信息实时同步到ArkTS侧. 效果图预览 使用说明 点击"Start Download"按钮后,Native侧启动子线程模拟 ...

  8. 阿里云 ACK One 多集群管理全面升级:多集群服务、多集群监控、两地三中心应用容灾

    简介: 本文介绍了 ACK One 近期发布的 3 个主要特性,覆盖了多集群管理的 3 个主要场景,跨集群服务发现与访问.多集群全局监控.应用容灾.除多集群管理外,ACK One 更是支持连接并管理任 ...

  9. MaxCompute同步数据的网络配置

    MaxCompute可以通过数据集成加载不同数据源(例如:MySQL数据库等)数据,同样也可以通过数据集成把MaxCompute的数据导出到各种业务数据库.数据集成功能已经集成到DataWorks作为 ...

  10. [GPT] 同为 nodejs 库的 Puppeteer 和 cheerio 的区别是什么

    Puppeteer 和 cheerio 是两个完全不同的库,用途和功能也截然不同. Puppeteer 是一个 Node.js 库,它使用 Chrome 或 Chromium 浏览器作为渲染引擎,通过 ...