单点登录(Single-Sign-On,SSO),即用户的一次性鉴别登录。当用户在身份认证中心登录一次以后,即可获得访问单点登录系统中,其他关联系统和应用软件的权限。这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个拥有着不同的认证与授权模式应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统,不再需要记忆多个不同的用户名与密码。
本系统提供以下类型的单点登录协议。
CAS全称为Central Authentication Service,即中央认证服务,是为应用提供可信身份认证的单点登录系统,CAS本身没有授权,也没有权限控制功能。
CAS包含两部分:
CAS Server:CAS Server负责完成对用户的认证工作,需要独立部署,CAS Server会处理用户用户名/密码等凭证。
CAS Client:负责处理用户对客户端的访问请求,当需要对请求方(即用户)进行身份认证时,会重定向到CAS Server进行认证。
OAuth2.1是一个为第三方应用提供统一授权的开放标准协议。在OAuth2.1协议中,根据不同的授权场景分为两种不同的授权模式,客户端凭证模式和授权码模式。
客户端凭证模式适用于受保护资源本身属于客户端的场景,客户端使用客户端ID和客户端凭证获取访问令牌,此模式客户端与资源所有者不属于一个实体,因此不适用于统一身份认证服务的业务场景。授权码模式广泛应用于Web应用等需要资源所有者参与的授权场景中,是一身份认证服务的业务场景。
授权码模式的基本流程是客户端首先向授权服务器请求一个授权码,并使用授权码获取访问令牌。为了避免攻击者伪装成客户端获取访问令牌,在OAuth2.1协议中授权码模式基于交换码证明密钥(PKCE,proof key for code exchange)设计。客户端请求授权时,PKCE随机创建一个code_verifier,该code_verifier经过t_m加密变换后生成t_m(code_verifier),客户端请求授权码时,将t_m(code_verifier)和t_m发送到授权服务器;请求访问令牌时将code_verifier发送到授权服务器,授权服务器通过t_m计算出t_m'(code_verifier),与之前收到的t_m(code_verifier)进行比较,以确保客户端在本次授权过程中未被仿冒。授权码模式中加入PKCE后,攻击者即使拦截到授权码也无法获得code_verifier,从而无法仿冒客户端获取到访问令牌,因此PKCE可以有效防御授权码拦截攻击,提升OAuth协议的安全性。