《单点登录(SSO):Session+Cookie、Token与双Token模式》

《单点登录(SSO):Session+Cookie、Token与双Token模式》

单点登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户使用一组凭据(通常是用户名和密码)登录到一个系统后,无需再次输入凭据即可访问其他相关系统。SSO的主要目的是简化用户的登录过程,提高用户体验,并减少用户在多个系统中管理多个账户的负担。

为什么需要单点登录呢?

我觉得有以下几点:

1.增强安全性

减少密码疲劳:用户无需为每个系统设置和记住不同的密码,从而降低了因密码疲劳而导致的弱密码或密码泄露风险。

集中管理:通过统一的认证中心管理用户身份和访问权限,可以更方便地进行权限控制和审计。一旦用户离职或权限变更,管理员只需在认证中心进行一次操作即可。

防止钓鱼攻击:用户只需在统一的认证页面输入凭证,减少了在多个系统中输入密码的场景,从而降低了被钓鱼攻击的风险

2.支持多设备访问

无缝访问:用户可以在不同设备(如电脑、手机、平板)上登录系统,无需重复输入凭证,提升了多设备访问的便利性

3.减少密码管理的复杂性

统一密码策略:企业可以通过单点登录系统强制执行统一的密码策略(如密码强度、过期时间等),减少因密码管理不一致导致的安全风险

单点登录的组成

我觉得可以概括为以下几个部分 :用户,子系统*n,认证中心 ,TOKEN/COKKIE等

单点登录的过程

1. 用户在子系统A登录

用户访问子系统A:用户尝试访问子系统A,但尚未登录。重定向到认证中心:子系统A检测到用户未登录,将用户重定向到中央认证中心(IdP)进行身份验证。用户登录:用户在认证中心输入用户名和密码进行登录。颁发令牌:认证中心验证用户身份后,颁发一个令牌(如JWT),并将用户重定向回子系统A。存储令牌:子系统A接收到令牌后,通常将其存储在客户端(如Cookie、localStorage或者 sessionStorage)中。

2. 用户访问子系统B

用户访问子系统B:用户尝试访问子系统B,但尚未登录。重定向到认证中心:子系统B检测到用户未登录,将用户重定向到中央认证中心(IdP)进行身份验证。认证中心验证令牌:认证中心检查用户是否已经登录(通过检查存储在Cookie、localStorage或者 sessionStorage中的令牌)。重定向回子系统B:如果用户已经登录,认证中心将用户重定向回子系统B,并附带令牌。存储令牌:子系统B接收到令牌后,通常将其存储在客户端(如Cookie、localStorage或者 sessionStorage)中。

3. 中间跳转页面

在单点登录过程中,通常会有一个中间跳转页面(也称为“跳板页面”或“中间件页面”),用于处理重定向和令牌传递。这个页面通常由认证中心提供,用于确保用户在不同子系统之间的无缝切换。

4. 子系统B如何知道用户已登录

令牌验证:子系统B接收到令牌后,会验证令牌的有效性(如签名、过期时间等)。用户信息提取:如果令牌有效,子系统B会从令牌中提取用户信息,并允许用户访问受保护的资源。无需再次登录:由于用户已经在认证中心登录并获得了有效的令牌,子系统B不会跳转到登录页面,而是直接允许用户访问。

5. 中间跳转页面的作用

重定向:中间跳转页面负责将用户从子系统A重定向到认证中心,并在用户登录后将用户重定向回子系统A。令牌传递:中间跳转页面负责在用户登录后将令牌传递给子系统A,并在用户访问子系统B时将令牌传递给子系统B。无缝切换:中间跳转页面确保用户在不同子系统之间的切换是无缝的,用户无需再次输入凭据。

三种单点登录的实现形式

SESSION+COOKIE模式

工作原理

用户登录后,服务器创建一个会话(Session),并生成一个唯一的会话ID(Session ID)。

服务器将Session ID存储在Cookie中,并发送给客户端。

客户端在后续请求中携带Cookie(包含Session ID),服务器通过Session ID从服务器端的Session存储中获取用户信息,验证用户身份。

优势

安全性较高:

Session数据存储在服务器端,不会暴露给客户端,减少了数据泄露的风险。

可以通过HTTPS、HttpOnly和Secure标志增强Cookie的安全性。

易于实现:

大多数Web框架(如Express.js、Spring Boot等)都内置了Session管理功能,开发成本低。

支持无状态和有状态的混合模式:

可以在服务器端存储用户状态信息,便于实现复杂的业务逻辑

便于删除,对用户可以绝对控制,可以添加黑名单

劣势

当子系统扩张,服务器也要扩张,成本很高。认证中心压力很大,要处理很多请求

TOKEN模式

工作原理

用户登录后,服务器生成一个Token(通常为JWT),并将用户信息(如用户ID、角色等)编码到Token中。

服务器将Token返回给客户端,客户端在后续请求中通过HTTP头部(如Authorization)携带Token。

服务器通过验证Token的签名和内容来确认用户身份。

优势:

认证中心压力减小

劣势:

认证中心失去了对用户的控制

双TOKEN模式

工作原理

用户登录后,服务器生成两个Token:

访问令牌(Access Token):用于在短时间内访问受保护资源。

刷新令牌(Refresh Token):用于在访问令牌过期后,重新获取新的访问令牌,而无需用户重新登录。

客户端在请求时使用访问令牌,当访问令牌过期时,使用刷新令牌获取新的访问令牌。

优势

增强用户体验:

用户无需频繁登录,访问令牌过期后可以通过刷新令牌快速续期。

提高安全性:

访问令牌的生命周期较短,降低了Token被窃取后被滥用的风险。

刷新令牌通常存储在更安全的环境中(如HttpOnly Cookie),减少了XSS攻击的风险。

灵活的过期策略:

可以独立管理访问令牌和刷新令牌的过期时间,提高系统的灵活性。

劣势

复杂性增加:

需要管理两种Token的生命周期,增加了系统的复杂性。

刷新令牌的安全性挑战:

如果刷新令牌被窃取,攻击者可以在较长时间内获取新的访问令牌。需要额外的安全措施(如限制刷新令牌的使用次数、IP绑定等)。

实现成本较高:

需要额外的逻辑来处理访问令牌和刷新令牌的生成、验证和续期。

你可能也喜欢

藠头国内主产地在哪?哪里产的藠头出名?
365怎么查看投注记录

藠头国内主产地在哪?哪里产的藠头出名?

07-15 4316
word中怎么设置文字底纹(word的文字底纹在哪里设置)
黑山起源:图文攻略全面解析,详尽全图指南揭秘