主流单点登录SSO协议概述

知识点:

  1. 认证和授权
  2. 单点登录,以及其主流方案

1,认证与授权

以小区门卫大叔的灵魂3问为例:

  1. 你是谁
  2. 你来自哪里
  3. 你将要到哪里去
  • 认证(authentication),确认用户的身份,解决你是谁的问题
    • 门卫大叔只有知道了你是谁,才能确认你是否初步判断是安全的
    • 同时在疫情情况下,还会询问你从哪里过来的(外部访问来源),如果是来自于风险区的话,会拒绝你当前的请求,上报风险管控中心
  • 授权(authorization),根据你的身份给你特定的权限,解决你能到哪里去的问题
    • 你是一个普通的外部人员,不可能直接给放你进来
    • 如果你是一个小区住户,那么门卫大叔才会给你开门(授予响应权限),才能真正进入小区

2,单点登录

SingleSign-On,SSO是一种帮助用户快捷访问网络中多个站点的安全通信技术。

该协议通过多个系统之间的用户身份信息的交换来实现单点登录。使用单点登录系统时,用户只需要登录一次,就可以访问多个系统,不需要记忆多个口令密码。单点登录使用户可以快速访问网络,从而提高工作效率,同时也能帮助提高系统的安全性。

image-20221127123536636

现实生活对照:

2.1,CAS

中央认证服务(central authentication server,CAS),是一种常见的B/S架构的SSO协议。和其他任何SSO协议一样,用户仅需要登录一次,访问其他应用则无需再次登录。

依据CAS的名称可知,它仅用于Authentication认证,和OAuth/OIDC协议不一样,并不能作为一种Authorization的协议。

当前CAS协议包括CAS1.0、CAS2.0、CAS3.0版本,这三个版本的认证流程基本类似。

CAS的认证流程通过包括几部分参与者:

  1. Client:通常为浏览器的使用者
  2. CAS Client:实现CAS协议的Web应用
  3. CAS Server:作为统一认证的CAS服务器

认证流程大致为:

image-20221127124219458

1,Client(终端用户)在浏览器里请求访问web应用example;

2,浏览器发起一个GET请求访问example应用的主页

3,应用example发现当前用户处于未登录状态,redirect(重定向)用户至CAS服务器进行认证

4,用户请求CAS服务器

5,CAS发现当前用户在CAS服务器中处于未登录状态,要求用户必须先进行登录

6,CAS服务器返回登录页面至浏览器

7,用户在登录界面中输入用户名和密码(或者其他认证方式)

8,用户把用户名和密码通过post,提交至CAS服务器

9,CAS对用户身份进行认证,若用户名和密码正确,则生成SSO会话,且会把会话ID(sessionId)通过cookie的方式返回至用户的浏览器端(此时,用户在CAS服务器端处于登录状态)

10,CAS服务器同时也会把用户重定向至CAS Client,且同时发送一个Service Ticket

11,CAS Client的服务端收到这个server ticket以后,请求CAS server对该ticket进行校验

12,CAS Server把校验结果返回给CAS Client,校验结果包括该ticket是否合法,以及该ticket中包含对用户信息

13,至此,CAS Client根据Server ticket得知当前登录用户的身份,CAS Client处于登录态

经过上述流程以后,CAS Server和CAS Client都处于登录态,当用户如果访问另外一个CAS Client2的时候,用户不需要再次认证,即会跳过5、6、7、8、9的步骤,从而达到SSO的效果

注意:CAS 1.0是一个有些历史的协议,在2.0、3.0版本中,Server Ticket的校验结果均为XML格式,且引入一种proxy模式

up主老齐的意见:

  1. CAS协议是一个比较简陋的单点登录协议,协议本身比较轻量级也比较容易实现,但是能够解决的场景比较单一
  2. 杂乱:CAS3.0 又引入了基于SAML对server ticket进行校验
  3. CAS Client和CAS Server之间的互信是通过接口调用的方式来建立的,没有任何加密/签名机制来保证进一步的安全
  4. 缺乏校验CAS Client自身身份的机制
  5. 市面上实现CAS协议的应用并不多,up主他自己不推荐使用这个

2.2,OAuth 2.0

当前谈到OAuth基本都是说的OAuth 2.0协议,它是一种authorization(授权)协议而非authentication(认证)协议,虽然OAuth2的流程中只描述了authorization,但是在实际使用中,authorization脱离authentication并没有任何意义

OAth 2.0解决的主要场景是:第三方应用如何被授权访问资源服务器。

整个流程参与者为:

  1. resource owner:资源拥有者,通常为终端用户
  2. resource server:资源提供者
  3. authorization server:授权服务器
  4. client:请求访问服务访问的应用

抽象的授权流程大致为:

image-20221127230025996

假定一个在线音乐服务,用户zhangsan(张三)想通过某音乐视频播放软件来播放在线音乐,但是在播放音乐之前,该音乐软件必须得通过IDaaS认证授权,得到张三的同意之后才能访问在线音乐。

这个场景中,张三为资源拥有者(Resource Owner),在线音乐服务为资源服务器(resource server),client为某音视频播放软件,IDaaS为授权服务器(authorization server)。

流程大致为:

  1. 音视频软件向张三发起授权请求,请求张三同意访问在线音乐服务
  2. 根据不同的授权模式,张三同意该授权,且返回一个“授权”给音视频服务
  3. 音视频服务携带张三的授权,请求IDaaS颁发一个access_token,用于访问在线音乐
  4. IDaaS校验音视频服务自身的合法性之后,颁发access_token
  5. 音视频服务携带access_token以后,代表张三请求访问在线音乐
  6. 在线音乐服务校验完access_token以后,提供音乐服务权限,播放器可以进行音乐播放

上述流程只是一个大致的初略流程,实际使用中,前三步会有不同的变化(不同的授权模式),比较常见的授权模式为:

  1. Authorization Code Grant(授权码模式):,最为常见、最安全,强烈推荐
  2. Implicit Grant(隐式授予):适用于SPA应用(单页Web应用),已经不在推荐使用,被PKCE模式代替
  3. Resouce Owner Password Credentials Grant(资源所有者密码凭据授予):需要把用户的用户名和密码暴露给client
  4. Client Credentials Grant(客户证书授予):整个流程没有用户的概念,适用于服务端->服务端调用的场景

通过上述讲解可知,音视频播放器并不需要知道张三的密码,只需要得到张三的授权就可以访问在线音乐,而整个授权就是由authorization server来负责的。

2.3,OIDC

OpenID Cennect简称OIDC,是基于OAuth2.0扩展出来的一个协议。除了能够OAuth2.0中的authorization场景,还额外定义了authentication的场景,OIDC协议是当今最为流行的协议。

相比于OAuth 2.0协议,OIDC引入了id_token等和userinfo相关的概念:

  • 整个OAuth2协议,只是定义了access_token/refresh_token,但是这俩token只是为了保护Resource Server的,并没有Resource Owner的身份信息
  • OIDC引入id_token的概念,用这个特殊的token来表示这个resource owner的身份:
    • 标准化id_token的格式:JSON Web Token(JWT)
    • 标准化id_token的内容:standard claims(标准要求)
  • OIDC引入关于如何获取详细userInfo的endpoint
  • OIDC定义了类似于SAML Metadata的discovery接口,俗称well-known接口

OIDC协议的登录授权流程和OAuth2.0基本类似,整个流程的参与者也类似,只不过换了个术语:

  • OpenID Provider:简称OP,负责认证和授权
  • Relying Party:简称RP,OAuth 2.0中的Client

image-20221127232839347

OIDC是当前使用最为主流的OSS标准协议,且对开发者友好实现起来比较简单

2.4,SAML 2.0

security assertion markup language,它是基于XML的标准协议。该标准定义了身份提供者和服务提供者之间,如何通过SAML规范,采用加密和签名的方式来建立互信,从而交换身份信息。是一个比较古老的协议,当前使用比较少了

image-20221127233216768

3,对比分析

上述介绍的几种主流的SSO协议,本质上都是基于中心信任的机制,服务提供者和身份提供者之间通过互信来交换用户信息,只是每个协议信息交换的细节不同,或者概念上有些不同。

image-20221127233309315

image-20221127233344967

image-20221127233401713

拓展知识:

  1. 角色权限控制
  2. RBAC、ABAC

参考链接:

  1. 【IT老齐241】SSO、CAS、OAuth、OIDC到底有啥区别?

posted on 2022-11-27 23:40  周健康  阅读(768)  评论(0编辑  收藏  举报

导航