一、单点登录
1、什么是单点登录(SSO)?
单点登录英文全称Single Sign On,简称SSO。指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分。
2、单点登录的原理
![](https://img-blog.csdnimg.cn/img_convert/9b8e728d4c0e154c0bb6e65a5b65fc0d.png)
3、SSO 的关键概念
3.1 用户代理
- 用户代理是指用户使用的客户端软件,例如浏览器
- 用户代理可以与身份提供者和服务提供者进行交互,处理重定向和认证流程。
- 在单点登录过程中,用户代理扮演着用户与身份提供者和服务提供者之间的中介角色
3.2 身份提供者(Identity Provider)
- 身份提供者是负责用户身份验证和颁发身份令牌的组件
- 用户访问终端会通过身份提供者登录,并提供有效的身份凭据(例如用户名和密码)
- 身份提供者验证用户凭据后,会发放包含用户身份信息的身份令牌,用于后续的认证和授权。
3.3 服务提供者(Service Provider)
- 服务提供者是依赖单点登录功能的应用程序或服务
- 用户访问服务提供者时,服务提供者会检查用户是否已验证,如果未验证,则要求用户进行身份验证过程
- 如果用户还未登录,服务提供者将用户重定向到身份提供者进行认证,在认证成功后,服务提供者可以使用收到的身份令牌建立用户会话。
4、单点登录的实现方法
4.1 基于 Cookie 的单点登录
cookie 是某些网站为了辨别用户身份,由服务端生成,发给客户端暂时或永久保存的信息。简言之,cookie 就是一种存储用户数据的媒介。举例来说,当我们打开一个网站,输入用户名和密码登录后系统会弹出是否保存 cookie,如果我们选择保存,在下一次登录时,就不需要再次输入用户名和密码,而是默认登录成功,直接进入页面。
4.2 基于令牌的单点登录
token 在身份认证中是令牌的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。简言之,token 就是一种凭证,用户在登录注册时需要获取凭证,在经过验证后,方可登录相关被授权的应用。用户在首次登录系统时输入账号和密码,服务器会收到登录请求,然后验证是否正确;服务器会根据用户信息,如用户 ID、用户名、秘钥、过期时间等信息生成一个 token 签名,然后发给用户;用户验证成功后,返回 token;前端服务器收到 token 后,存储到 cookie 或 Local Storage 里; 当用户再次登录时,会被服务器验证 token;服务器收到用户登录请求后,对 token 签名进行比对:如果 token 验证正确,用户登录成功;如果 token 验证不正确,用户登录失败,跳转到登录页。
4.3 基于 OpenID Connect 的单点登录
使用 OpenID,用户的凭据仅在浏览器路由请求后由授权服务器使用。验证后,将向用户颁发访问令牌,用户可以通过该令牌访问多个应用程序,而无需与每个应用程序共享其凭据。
5、SSO 的优势和应用场景
优势
- 用户便利性:SSO允许用户使用一组凭据(例如用户名和密码)在多个应用程序或系统中进行身份验证,避免了重复输入凭据的繁琐过程,提高了用户体验
- 安全性增强:相比于传统的多个独立的凭据,SSO使用更强大的身份验证和授权机制,提升了安全性。用户只需在单个身份验证过程中输入凭据,减少了密码泄露的风险
- 提高工作效率:对于企业或组织来说,SSO可以减轻IT团队的管理负担,避免了为每个应用程序单独进行用户管理和授权的工作。此外,员工不需要花费额外的时间和精力来管理多个不同的凭据,可以专注于业务工作。
- 统一访问控制:SSO可以集中管理用户的访问权限,通过一个中心化的身份提供者来控制用户对不同应用程序或系统的访问权限,确保只有经过授权的用户可以使用对应的资源和功能
- 降低成本:通过SSO,企业可以降低对硬件、软件以及相关的IT支持和维护的成本。减少了因为密码重置和用户管理等问题而产生的支持成本
应用场景
- 企业内部:在企业内部应用中,SSO可以实现员工访问不同的内部系统、应用和资源而无需重复登录。
- 电子商务平台:用户在电子商务平台上可以通过SSO登录,享受一次购物车和统一会员体验。
- 教育机构:学生和教职工可以通过SSO登录学校的学习资源平台、图书馆系统等。
二、OAuth 2.0
1、什么是OAuth 2.0?
OAuth 2.0 是一种用于授权的开放标准协议,允许用户通过第三方应用程序授权访问其在其他网站或应用程序上存储的受保护资源,而无需将其用户名和密码提供给第三方应用程序。
2、OAuth 2.0 的授权流程
![](https://img-blog.csdnimg.cn/img_convert/78c1bc01b7cad456c0638535931fd213.png)
2.1 客户端向资源所有者请求授权:
客户端向资源所有者展示请求访问受保护资源的页面或弹出对话框,并请求资源所有者进行授权。
2.2 资源所有者授权客户端:
资源所有者在页面或对话框中进行身份验证,并选择是否授权客户端访问受保护资源。
2.3 认证服务器发放授权码:
资源所有者授权客户端后,认证服务器将授权码颁发给客户端。此授权码是一个临时令牌,用于后续获取访问令牌。
2.4 客户端通过授权码获取访问令牌:
客户端使用授权码向认证服务器发送请求,包括授权码、客户端凭证和重定向 URI。认证服务器验证请求,并颁发访问令牌给客户端。
2.5 客户端访问资源服务器:
客户端使用获得的访问令牌向资源服务器发送请求,包括访问令牌和所需的资源标识符。
2.6 资源服务器返回受保护资源:
资源服务器验证访问令牌的有效性,并根据令牌的权限级别判断是否返回受保护资源给客户端。
2.7 刷新令牌:
如果访问令牌过期或即将过期,客户端可以使用刷新令牌向认证服务器请求新的访问令牌,而无需再次获得资源所有者的授权
3、OAuth 2.0 的四种角色
3.1 资源所有者 (Resource Owner)
资源所有者是指拥有受保护资源的用户。该用户可以是最终用户或应用程序(代表用户)。资源所有者在授权过程中可以决定是否授权第三方应用程序访问其资源。
3.2 客户端 (Client)
客户端是请求访问受保护资源的应用程序或服务。它可能是一个网站、移动应用、桌面应用或其他类型的应用程序。客户端必须获得资源所有者的授权才能访问受保护资源。
3.3 授权服务器 (Authorization Server)
认证服务器负责对资源所有者进行身份验证,并根据资源所有者的授权进行令牌的发放和管理。它是授权流程中的核心组件,负责颁发访问令牌给客户端。
3.4 资源服务器 (Resource Server)
资源服务器是存储受保护资源的服务器。它验证客户端请求中的访问令牌,并根据令牌的权限级别决定是否允许客户端访问资源。
4、OAuth 2.0 的令牌类型
4.1 授权码 (Authorization Code)
授权码是在授权过程中用于交换访问令牌的一种临时令牌。当资源所有者授权客户端后,认证服务器将授权码颁发给客户端,并通过安全的方式传输给客户端。客户端使用授权码与认证服务器交换访问令牌。
4.2 访问令牌 (Access Token)
访问令牌是客户端用于访问被保护资源的令牌。当客户端通过授权码或其他方式从认证服务器获取到访问令牌后,它可以使用访问令牌向资源服务器发送请求,以验证身份并获取受保护资源。
4.3 刷新令牌 (Refresh Token)
刷新令牌是用于更新访问令牌的令牌。当访问令牌过期或即将过期时,客户端可以使用刷新令牌向认证服务器请求新的访问令牌,而无需再次获得用户的授权。
4.4 ID 令牌(ID Token)
ID 令牌是包含有关身份信息的令牌。它通常在 OpenID Connect 协议中使用,用于用户身份验证和提供用户信息给客户端。
三、单点登录和OAuth 2.0的结合应用
1、单点登录和OAuth2.0的区别
单点登录是一种身份验证机制,它允许用户使用一组凭据(如用户名和密码)登录到一个认证中心,然后使用该认证中心的凭据访问多个关联的系统,而无需再次输入凭据。简单来说,SSO允许用户在多个应用程序之间只需登录一次。
OAuth 2.0是一种授权框架,用于授权第三方应用程序访问受保护的资源,而无需将用户的用户名和密码直接提供给第三方应用。OAuth 2.0通过使用访问令牌(Access Token)来实现授权,用户在向第三方应用授权访问其资源时,会被重定向到认证服务器进行身份验证,然后向授权服务器请求访问令牌。第三方应用使用该访问令牌来访问受保护的资源,而无需了解用户的凭据。
2、单点登录和OAuth 2.0的结合优势
单点登录和OAuth 2.0的主要区别在于目的和使用场景。单点登录主要用于简化用户登录过程,提高用户体验,而OAuth 2.0主要用于授权第三方应用程序访问受保护的资源,保护用户的凭据安全。在某些情况下,两者可以结合使用,以提供更全面的身份验证和授权体验。
四、单点登录与OAuth 2.0的结合实现
1、架构示意图
![](https://img-blog.csdnimg.cn/img_convert/52c6bb6a490e439ee50e5a7d1b39fe23.png)
2、实现流程
- 用户打开浏览器访问系统页面,如果有缓存的token/令牌则直接进入系统
- 无缓存的token/令牌,重定向登录页。通过校验用户名/密码从验证服务器获取token
- 系统通过token 向验证服务器校验权限
3、注意事项
规范
- 遵循 OAuth 2.0 规范和标准,以确保与其他支持 OAuth 2.0 的系统和服务的互操作性。这有助于确保用户可以通过一次身份验证获得对多个应用程序和服务的访问权限。
安全
- 考虑使用适当的令牌。使用访问令牌和/或刷新令牌来验证用户身份和授予访问权限。刷新令牌可以用于定期更新访问令牌,以延长用户的会话时间。
- 单点登录涉及到用户身份的跨系统共享,因此要确保在传输令牌时使用安全的通信协议(例如 HTTPS),并加密敏感数据。
用户体验
- 用户在已经授权的情况下无缝地访问不同的应用程序和服务。减少用户重复输入凭据的需求,并提供单一登录页面和集中的账户管理功能。