【后端】单点登录

不定期更新。后期更新代码实战。

目录

概念

Single Sign-On,简称 SSO

是一种身份验证解决方案,它允许用户只需一次登录,就能访问多个相互信任但独立的应用程序或系统,而无需在每个应用中重复输入用户名和密码。

  • 优点
    提升用户体验: 用户无需记住多个密码,一次登录,方便快捷。
    增强安全性: 用户只需管理一个强密码,降低密码管理负担和被猜测的风险。集中认证也便于实施多因素认证(MFA)。
    简化管理: IT 部门可以集中管理用户身份和访问权限,减少密码重置请求。
    提高工作效率: 减少重复登录的时间。
  • 缺点
    单点故障(Single Point of Failure): 如果 SSO 认证中心出现故障,所有依赖它的系统都将无法登录。
    安全风险集中: 一旦 SSO 系统被攻破,攻击者可能获得对所有关联系统的访问权限。
    实现复杂性: 建立和维护 SSO 系统可能涉及复杂的协议(如 OAuth 2.0, OpenID Connect, SAML)和架构设计。
    兼容性问题: 并非所有旧的应用程序都能轻松集成 SSO。
  • 常见的 SSO 协议和标准包括:SAML、OAuth 2.0 / OpenID Connect (OIDC)、Kerberos 等。

工作原理

SSO 的实现通常涉及一个独立的认证中心(Identity Provider, IdP)和多个服务提供商(Service Provider, SP)。

  • 认证中心(IdP):
    这是唯一一个接收用户用户名和密码的地方。它负责对用户进行身份验证。
    认证成功后,它会向用户颁发一个认证令牌(Token),表明该用户已通过验证。
  • 服务提供商(SP):
    这些是用户需要访问的各个应用程序或系统。
    不直接处理用户的用户名和密码。它们信任认证中心颁发的令牌token。

工作流程

  • 首次访问: 用户尝试访问某个受 SSO 保护的应用(服务提供商 SP1)。
  • 重定向至认证中心: SP1 检测到用户未登录,将其重定向到独立的认证中心(IdP)的登录页面。
  • 用户登录: 用户在认证中心输入用户名和密码进行登录。
  • 颁发令牌: 认证中心验证用户凭据。如果验证成功,它会生成一个安全的认证令牌(如 Session Token、SAML 断言、OAuth/OIDC Token 等),并将用户重定向回 SP1,通常会携带这个令牌或获取令牌的方式。
  • SP1 验证并授权: SP1 接收到令牌后,会向认证中心验证令牌的有效性。验证通过后,SP1 认为用户已登录,并允许用户访问其资源。同时,浏览器会将这个令牌(通常通过 Cookie 或 localStorage)存储在用户本地。
  • 访问其他应用: 用户接着访问另一个受 SSO 保护的应用(SP2)。
  • 自动登录: SP2 检测到用户未登录,同样会重定向到认证中心。但此时,由于浏览器中已经有之前认证中心颁发的有效令牌,认证中心识别到用户已登录,无需再次输入凭据,直接向 SP2 颁发新的或验证旧的令牌。SP2 验证令牌后,也允许用户访问。
    关键: 用户只需在认证中心登录一次,后续访问所有关联应用时,都是通过认证中心识别并传递认证状态,从而实现无缝登录。

实现

  • 认证中心 (Identity Provider, IdP) 的搭建:
    用户凭据的存储、验证和管理。
    安全令牌的生成、分发和校验(例如 Session ID、JWT、SAML 断言)。
    处理认证协议的逻辑(OAuth 2.0, OpenID Connect, SAML)。
    管理用户会话状态。
  • 服务提供商 (Service Provider, SP) 的集成:
    各个应用(SP)需要与认证中心进行通信,以验证接收到的令牌。
    这涉及到后端服务对令牌解析、验证签名、检查过期时间、以及根据令牌中的用户身份信息来建立应用内部的用户会话。
    处理重定向和回调 URL 的逻辑。

前端部分

前端负责用户界面的展示、重定向、以及与后端认证服务的交互。 它是用户与 SSO 系统进行互动和体验的部分。

  • 重定向处理:
    当用户未登录时,前端应用会(通常由后端指导)将用户重定向到认证中心的登录页面。
    认证成功后,认证中心会将用户重定向回前端应用,此时前端需要能够接收并处理认证中心传递回来的令牌(通常在webStorage 或 HttpOnly 的 Cookie 中)。
    前端在接收到令牌后,会将其传递给自己的后端服务进行验证和会话建立。
  • 认证状态管理:
    前端需要知道当前用户的登录状态。
    在某些实现中,前端可能需要存储和管理一些轻量级的认证信息(如 Access Token),并在后续请求中将其添加到 Authorization 头中发送给后端 API。
    处理因令牌过期而导致的重新认证流程。
  • 用户界面:
    显示登录页面(如果认证中心是独立的前端页面)。
    处理登录表单的提交。
  • 注意安全性
    全程使用 HTTPS: 这是最基本的安全措施,加密所有网络传输,防止 Token 在传输过程中被截获。
    定期更新/刷新 Token: 即使 Token 被窃取,其有效时间越短,造成的损害越小。
    在服务端进行校验: 所有的 Token 都必须在后端严格校验其有效性、签名和过期时间。
    注销时清除 Token: 用户登出时,应清除所有客户端存储的 Token。
    防御 XSS 和 CSRF 攻击: 这是 Web 安全的基石,无论 Token 放在哪里,都必须全面考虑。
相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万3 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
三十而立洋3 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁3 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95273 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大3 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师3 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端