Web系统之常用单点登录协议

单点登录

企业中一般会存在多个系统,假设用户进入每个系统前都需要输入账号/密码登录,在系统个数少的情况下,每次输入账号/密码还能接收;如果系统个数较多,用户则无法接收。单点登录则很好地解决了此问题。

单点登录的原理是用户只需进行一次登录,便可访问多个系统。

可用于单点登录的协议较多,下面将会简单说明一下常见的四种单点登录协议CAS、OAuth2、OpenID、SAML。

CAS

CAS协议是一种基于token协议。它用于Web应用的单点登录或登出,协议内容就是规范出一组用于登录/登出的URIs。协议详见:https://apereo.github.io/cas/4.2.x/protocol/CAS-Protocol.html

协议涉及到的重要概念如下:

  • CAS Client
    其为各个具体应用程序,主要作用是调用CAS服务器提供的URIs验证token并获取认证过的用户信息。CAS服务器即为认证中心。
  • CAS Server
    认证中心。
  • TGT(ticket-granting ticket)
    其为CAS为用户签发的登录票据。在CAS中登录成功后,CAS会生成TGT作为session的key,并设置一个cookie名为TGC(ticket-granting cookie),cookie值为TGT。当再次访问CAS时,会从cookie中取出TGT并检查TGT对应session是否已过期,若未过期,则表示已登录过。
  • TGC(ticket-granting cookie)
    其为Cookie名,对应值为TGT。
  • ST(service ticket)
    访问应用程序的一个门票。

用CAS实现的单点登录流程如下:

Web系统之常用单点登录协议_第1张图片
image.png

具体可查阅官方文档: https://apereo.github.io/cas/4.2.x/protocol/CAS-Protocol.html

OAuth2

理解OAuth2本身,见http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

这里重点提出的是使用Oauth2的单点登录流程:

Web系统之常用单点登录协议_第2张图片
image.png

详见: https://github.com/longfeizheng/sso-merryyou

OpenId

OpenID最新版本是OpenID Connect,它为OpenID的第三代技术。OpenID Connect允许所有类型的客户端,包括基于浏览器和本机移动应用程序。

OpenID用于终端用户的身份认证,OAuth2用于在已知用户身份合法情况下对客户端的资源授权。OpenID Conect = OpenID + OAuth2。

OpenID Connect基于OAuth协议之上,在OAuth2中有一个特殊的Scope "openid"来标识openid请求,并在OAuth2的返回体中增加一个idtoken的字段来标识用户。

使用OpenID Connect的单点登录流程与Oauth2一致。

目前国内很多应用(浏览器或手机)都支持微信,微博等第三方认证,比如。这种第三方认证可以用OpenID Connect来实现。

注意一般商业应用才会支持使用第三方认证

SAML

SAML通过XML进行交互,且基于HTTP之上。

SAML协议中涉及的基本术语下面进行简要介绍。

IdP: Identity Provider, 身份提供商,是指提供身份管理的服务。常见的企业自有IdP有AD FS,Shibboleth等,Cloud IdP有Azure AD,Okta,OneLogin等。

SP: Service Provider,服务提供商,是指利用IdP的身份管理功能,为用户提供具体服务的应用。SP会消费IdP提供的用户信息。在一些非SAML协议的身份系统(比如OIDC)里,也把Service Provider称作Relying Party,也就是IdP的依赖方。

SAML: Security Assertion Markup Language,是一个实现企业级用户身份认证的标准协议。是SP和IdP之间实现沟通的技术实现方式之一。是目前企业身份联盟的的事实标准(SAML 2.0)。

SAML Assertion: 简称Assertion,SAML断言,是SAML协议中用来描述认证请求(Request)和认证响应(Response)的核心元素。例如用户的具体属性就包含在认证响应的断言里面。

Trust: 信赖,是指建立在SP和IdP之间的互信机制,通常由公私钥来实现。SP通过可信的方式获取IdP的的身份联盟元数据,元数据中包括了IdP用来给SAML Assertion签名的私钥的对应公钥,SP则可以使用公钥来验证Assertion的完整性(Integrity)。

参考阿里云单点登录案例:https://m.aliyun.com/doc/document_detail/69969.html

对比

一个参考链接:https://www.jianshu.com/p/5d535eee0a9b
具体选用哪种单点登录方式,需要权衡利弊。

参考链接

  • https://www.jianshu.com/p/5d535eee0a9b
  • https://www.jianshu.com/p/be7cc032a4e9
  • https://www.jianshu.com/p/636c1ee16eba
  • http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
  • https://github.com/longfeizheng/sso-merryyou
  • https://apereo.github.io/cas/5.2.x/protocol/CAS-Protocol.html
  • https://m.aliyun.com/doc/document_detail/69969.html

你可能感兴趣的:(Web系统之常用单点登录协议)