• 基于 OAuth2.0 协议的单点登录系统方案设计


    一、什么是单点登录?

    单点登录(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

  • 相关阅读:
    BZOJ1864: [Zjoi2006]三色二叉树
    2019牛客全国多校训练四 I题 string (SAM+PAM)
    2019杭电多校第二场
    HDU5919 Sequence II(主席树)
    2019牛客全国多校训练三 题解
    2019牛客多校第二场
    2019 杭电多校第一场 题解
    2019 牛客全国多校一
    POJ3261 Milk Patterns(后缀数组)
    POJ1743 Musical Theme (后缀数组 & 后缀自动机)最大不重叠相似子串
  • 原文地址:https://www.cnblogs.com/yxhblogs/p/14643048.html
Copyright © 2020-2023  润新知